2日間スラグリングした後、私は問題の解決策を見つけました。@XmlRootElementを持たないクラスの回避策としてObjectFactoryクラスを使用できます。ObjectFactoryには、JAXBElementをラップするためのオーバーロードメソッドがあります。
メソッド:1は、オブジェクトの単純な作成を行います。
Method:2は、オブジェクトを@JAXBElementでラップします。
常にMethod:2を使用して、javax.xml.bind.MarshalExceptionを回避します-リンクされた例外で@XmlRootElementアノテーションが欠落しています。
以下のサンプルコードを見つけてください
方法1:オブジェクトの簡単な作成を行います
public GetCountry createGetCountry() {
return new GetCountry();
}
Method: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();