İki gün boyunca uyuşturucu aldıktan sonra sorunun çözümünü buldum . @XmlRootElement olmayan sınıflar için geçici çözüm bulmak için ObjectFactory sınıfını kullanabilirsiniz . ObjectFactory, JAXBElement çevresine sarmak için aşırı yüklenmiş yöntemlere sahiptir.
Yöntem: 1 nesnenin basit oluşturulmasını yapar.
Yöntem: 2 nesneyi @JAXBElement ile sarar .
Javax.xml.bind.MarshalException öğesinden kaçınmak için her zaman Yöntem: 2'yi kullanın.
Lütfen aşağıdaki örnek kodu bulun
Yöntem: 1 nesnenin basit oluşturulmasını yapar
public GetCountry createGetCountry() {
return new GetCountry();
}
Yöntem: 2 nesneyi @JAXBElement ile sarar .
@XmlElementDecl(namespace = "my/name/space", name = "getCountry")
public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
}
Çalışma kodu örneği:
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();