दो दिनों के लिए sruggling के बाद मैंने पाया problem.You के लिए समाधान का उपयोग कर सकते ObjectFactory वर्ग है जो नहीं है के लिए वैकल्पिक हल के लिए कक्षा @XmlRootElement । ObjectFactory ने JAXBElement के चारों ओर इसे लपेटने के लिए ओवरलोड तरीके हैं।
विधि: 1 वस्तु का सरल निर्माण करता है।
विधि: 2 ऑब्जेक्ट को @JAXBElement के साथ लपेटेगा ।
हमेशा javax.xml.bind.MarshalException से बचने के लिए विधि का उपयोग करें - लिंक किए गए अपवाद के साथ एक @ xmlRootElement एनोटेशन गायब है।
कृपया नीचे दिए गए सैंपल कोड को देखें
विधि: 1 वस्तु का सरल निर्माण करता है
public GetCountry createGetCountry() {
return new GetCountry();
}
विधि: 2 ऑब्जेक्ट को @JAXBElement के साथ लपेटेगा ।
@XmlElementDecl(namespace = "my/name/space", name = "getCountry")
public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
}
काम कोड नमूना:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
WebServiceTemplate springWSTemplate = context.getBean(WebServiceTemplate.class);
GetCountry request = new GetCountry();
request.setGuid("test_guid");
JAXBElement<GetCountryResponse> jaxbResponse = (JAXBElement<GetCountryResponse>)springWSTemplate .marshalSendAndReceive(new ObjectFactory().createGetCountry(request));
GetCountryResponse response = jaxbResponse.getValue();