Web Services 在Rest Web服务中使用SOAP XML

pu82cl6c  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(173)

我可以在rest webservice中使用基于xml的请求。下面是我如何在rest webservice中使用XML请求的示例代码。
现在,我想使用SOAP请求XML,我知道SOAP是一种消息传递协议。它只能由基于SOAP的Web服务使用,但它使用XML数据格式来声明其请求和响应消息,依赖于XML架构。我只想在其余Web服务中接收其基于XML的请求。
在基于休息的网络服务中,有没有什么方法可以满足这种需求?
下面是我想在rest webservice中使用的示例soap请求。

SOAP请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://example.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <order>
            <order-no></order-no>
            <custmer></custmer>
            <address></address>
            <bill-amount></bill-amount>
        </order>
    </soapenv:Body>
</soapenv:Envelope>

下面是我如何在我的rest webservice中使用XML请求的示例代码。

样品代码:

使用XML请求的Rest终结点

@Path("/processOrder")
    @POST
    @Produces("application/xml")
    @Consumes("application/xml")
    public OrderResponse processOrder(Order order) {
    return processUser(order);
    }

订单.java

@XmlRootElement(name = "order")
    public class Order {    
    private int orderNo;
    private String custmer;
    private String address;
    private String amount;
     
    @XmlAttribute(name = "order-no")
    public int getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(int orderNo) {
        this.orderNo = orderNo;
    }
     
    @XmlElement
    public String getCustmer() {
        return custmer;
    }
    public void setCustmer(String custmer) {
        this.custmer = custmer;
    }
     
    @XmlElement
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
     
    @XmlElement(name = "bill-amount")
    public String getAmount() {
        return amount;
    }
    public void setAmount(String amount) {
        this.amount = amount;
    }    
   }

订单响应.java

@XmlRootElement(name = "orderResponse")
    public class OrderResponse{    
    private String response;

    @XmlElement(name = "response")
    public String getResponse() {
        return response;
    }
    public void setResponse(String response) {
        this.response= response;
    }
    }

XML请求:

<order>
    <order-no></order-no>
    <custmer></custmer>
    <address></address>
    <bill-amount></bill-amount>
</order>

XML回应:

<orderResponse>
    <response></response>
</orderResponse>
deikduxw

deikduxw1#

Rest API主要基于JSON文档,通常是大多数实现的主要标准。即使如此,也没有什么能阻止您将application/json内容类型发送到HTTP服务器,而不是发送application/xml并让API以这种方式处理它。
要处理以XML的SOAP子集编码的消息,您需要检索请求正文文本并通过某种SOAP消息处理引擎处理它。对于返回消息,您必须以相同的方式工作,处理所需的消息类型,获取XML并将其返回给客户端。

@Path("/processOrder")
    @POST
    @Produces("application/xml")
    @Consumes("application/xml")
    public String processOrder(String order) {
        String result = "";
        /* Some kind of the logic to process SOAP Messages. */
        return result;
    }

最后,我可以推荐一个库,以便您可以实现此逻辑,该库是Jakarta SOAP,您可以从这里处理从请求中获得的SOAP消息。
链接到库:https://eclipse-ee4j.github.io/metro-saaj/

相关问题