Setelah sruggling selama dua hari saya menemukan solusi untuk masalah ini. Anda dapat menggunakan kelas ObjectFactory untuk mencari solusi untuk kelas-kelas yang tidak memiliki @XmlRootElement . ObjectFactory memiliki metode kelebihan beban untuk membungkusnya di sekitar JAXBElement.
Metode: 1 melakukan penciptaan objek secara sederhana.
Metode: 2 akan membungkus objek dengan @JAXBElement .
Selalu gunakan Metode: 2 untuk menghindari javax.xml.bind.MarshalException - dengan pengecualian terkait kehilangan anotasi @XmlRootElement.
Silakan temukan kode sampel di bawah ini
Metode: 1 melakukan penciptaan objek secara sederhana
public GetCountry createGetCountry() {
return new GetCountry();
}
Metode: 2 akan membungkus objek dengan @JAXBElement .
@XmlElementDecl(namespace = "my/name/space", name = "getCountry")
public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
}
Contoh kode kerja:
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();