이틀 동안 으깬 후 문제에 대한 해결책을 찾았습니다. ObjectFactory 클래스를 사용 하여 @XmlRootElement 가없는 클래스에 대한 해결 방법을 사용할 수 있습니다 . ObjectFactory는 JAXBElement를 감싸는 메소드를 오버로드했습니다.
방법 : 1 은 객체의 간단한 생성을 수행합니다.
방법 : 2 는 @JAXBElement로 객체를 래핑합니다 .
javax.xml.bind.MarshalException을 피하려면 항상 Method : 2 를 사용하십시오 . 링크 된 예외에서 @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();