Depois de fazer o manuseio por dois dias, encontrei a solução para o problema. Você pode usar a classe ObjectFactory para solucionar as classes que não possuem o @XmlRootElement . O ObjectFactory sobrecarregou métodos para envolvê-lo em torno do JAXBElement.
Método 1 faz a criação simples do objeto.
Método: 2 envolverá o objeto com @JAXBElement .
Sempre use o método: 2 para evitar javax.xml.bind.MarshalException - com a exceção vinculada ausente na anotação @XmlRootElement.
Encontre o código de exemplo abaixo
Método: 1 faz a criação simples do objeto
public GetCountry createGetCountry() {
return new GetCountry();
}
Método: 2 envolverá o objeto com @JAXBElement .
@XmlElementDecl(namespace = "my/name/space", name = "getCountry")
public JAXBElement<GetCountry> createGetCountry(GetCountry value) {
return new JAXBElement<GetCountry>(_GetCountry_QNAME, GetCountry.class, null, value);
}
Exemplo de código de trabalho:
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();