3

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

1
  • 1
    Try with a List<StupidData> Commented Dec 20, 2012 at 19:54

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

2 Comments

In my case I want my wsdl to include ArrayOfXXX .But unable to achieve it .Here is my question.Kindly let me know which version of CXF you were using that was creating ArratOfLOB.Or any JaxB annotation is required.stackoverflow.com/questions/53514875/…
@AvinashJethy Sorry the only thing I can provide is the version: I used cxf-rt-frontend-jaxws and cxf-rt-transports-http, from maven, both version 3.2.0. Code was not mine so I don't know about the annotations.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.