有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在JavaSOAP中使用相同的参数名进行接收和发送

我有一个SOAP web服务代码,如下所示:

public void sumAndMultiplyAndReference
(@WebParam(name = "firstnumber")int a,
 @WebParam(name = "firstnumber")int b,
 @WebParam(name = "referencenumber")int c
 @WebParam(name = "sum", mode = WebParam.Mode.OUT) Holder<Integer> sum,
 @WebParam(name = "multiply", mode = WebParam.Mode.OUT) Holder<Integer> multiply,
 @WebParam(name = "reference", mode = WebParam.Mode.OUT) Holder<Integer> reference){
sum.value = a + b;
multiply.value = a * b;
reference.value = c;
}

它工作得很好。但是应该在代码中更改什么,以便请求参数name=referencenumber和应答参数name相同

注意:here-request参数name = referencenumber

响应参数name = reference


共 (2) 个答案

  1. # 1 楼答案

    使用WebParam.Mode.INOUT,这样您就可以双向使用它

    阅读from Apache about @WebParam,以下是摘录

    If the Holders were specified as WebParam.Mode.INOUT params, then the client could use them to send data and the application as well. The Holder instances would then be initialized with the data from the client request. The application could check the data before eventually overriting it with the response values.

  2. # 2 楼答案

    这对我很有用:

    package org.toto.bla;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    
    import javax.xml.ws.Holder;
    @WebService
    public class WSTest {
        @WebMethod
        public void sumAndMultiplyAndReference(@WebParam(name = "firstnumber") int a, @WebParam(name = "secondnumber") int b,
                                               @WebParam(name = "referencenumber") int c,
                                               @WebParam(name = "sum", mode = WebParam.Mode.OUT) Holder<Integer> sum,
                                               @WebParam(name = "multiply", mode = WebParam.Mode.OUT) Holder<Integer> multiply,
                                               @WebParam(name = "referencenumber", mode = WebParam.Mode.OUT) Holder<Integer> reference) {
            sum.value = a + b;
            multiply.value = a * b;
            reference.value = c;
        }
    }
    

    下面是由此生成的XSD:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:ns0="http://bla.toto.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://exporter.vas.asgs.atos.net/">
       <xsd:complexType name="sumAndMultiplyAndReferenceResponse">
          <xsd:sequence>
             <xsd:element name="sum" type="xsd:int" minOccurs="0"/>
             <xsd:element name="multiply" type="xsd:int" minOccurs="0"/>
             <xsd:element name="referencenumber" type="xsd:int" minOccurs="0"/>
          </xsd:sequence>
       </xsd:complexType>
       <xsd:complexType name="sumAndMultiplyAndReference">
          <xsd:sequence>
             <xsd:element name="firstnumber" type="xsd:int"/>
             <xsd:element name="secondnumber" type="xsd:int"/>
             <xsd:element name="referencenumber" type="xsd:int"/>
          </xsd:sequence>
       </xsd:complexType>
       <xsd:element name="sumAndMultiplyAndReferenceResponse" type="ns0:sumAndMultiplyAndReferenceResponse"/>
       <xsd:element name="sumAndMultiplyAndReference" type="ns0:sumAndMultiplyAndReference"/>
    </xsd:schema>
    

    您还可以使用INOUT参数类型: 包组织。托托。bla

    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    
    import javax.xml.ws.Holder;
    
    @WebService
    public class WSTest {
        @WebMethod
        public void sumAndMultiplyAndReference(@WebParam(name = "firstnumber") int a, @WebParam(name = "secondnumber") int b,
                                               @WebParam(name = "sum", mode = WebParam.Mode.OUT) Holder<Integer> sum,
                                               @WebParam(name = "multiply", mode = WebParam.Mode.OUT) Holder<Integer> multiply,
                                               @WebParam(name = "referencenumber", mode = WebParam.Mode.INOUT) Holder<Integer> c) {
            sum.value = a + b;
            multiply.value = a * b;
        }
    }
    

    生成完全相同的XSD