简体   繁体   中英

Arrays in SOAP method Parameters generated via JAX-WS?

I am building a SOAP service in Java with JAX-WS annotations. Among other things I wonder how to annotate array parameters in my methods. At the moment when I generate a wsdl from my annotated interface and then generate java classes again from that wsdl (I do that for testing, in both cases using Apache cxf), it will generate Classes to hold the array parameters.

Example:

 @WebService(name="sillyService",
    ...
)
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.BARE)
public interface SillyService {
    public String doSillyThings(
         @WebParameter(name = "stupid") StupidData[] stupid;
    );
}

Where StupidData would be another class annotated like this

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "StupidData")
public class StupidData {
@XmlElement(name = "datapoint")
String datapoint;
}

Then instead of an Array, in the generated classes the Parameter becomes a new class StupidDataArray which has a filed that is the array of StupidData.

Any way to make it accept the array as parameter directly? Thanks...

In my case, the code generated by apache CXF from the WSDL files includes ArrayOfXXX classes, with a single getXXX() method returning a List . The autogenerated javadoc of this method states:

This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to the returned list will be present inside the JAXB object. This is why there is not a set method for the guid property. For example, to add a new item, do as follows: getXXX().add(newItem);

To answer your question, you can't pass a native array to the method but you can pass the Array class after you have added elements to its underlying list. To do that, you retrieve the encapsulated List from the array wrapper using getXXX() and add elements to it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM