how to receive and send with same parameter name in JAVA SOAP

倾然丶 夕夏残阳落幕 提交于 2019-12-24 11:34:34

问题


I have a SOAP web service code as below:

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;
}

It is working fine. But what should be changed in the code such that, the request parameter name = referencenumber and reply parameter name be same?

Note: here- request parameter name = referencenumber

response parameter name = reference


回答1:


This works for me:

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;
    }
}

And here is the generated XSD from this:

<?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>

You could also use the INOUT param type: 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 = "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;
    }
}

Which generates the exact same XSD.




回答2:


Use WebParam.Mode.INOUT, that way you will be able to use it in bi-directional way.

Read from Apache about @WebParam, below is excerpt.

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.



来源:https://stackoverflow.com/questions/32904132/how-to-receive-and-send-with-same-parameter-name-in-java-soap

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!