2011-12-27 4 views
2

JAXBElement를 SOAP 메시지의 SOAPBody의 자식으로 추가하는 방법. 어떻게 내가 내 웹 서비스 엔드 포인트 방법 안에 할 시도하고 있습니다 : JAXBElement를 SOAP 메시지의 SOAPBody의 자식으로 추가하는 방법

SaajSoapMessage soapRequest = (SaajSoapMessage) messageContext.getRequest(); 
    SOAPBody soapBody=soapRequest.getSaajMessage().getSOAPBody(); 
    ObjectFactory of=new ObjectFactory(); 
    SplsTID tid=new SplsTID(); 
    JAXBElement<SplsTID> element=of.createSplsTID(tid); 
    element.soapBody.appendChild(element); 

그런 다음 내가 java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to org.w3c.dom.Element를 얻을.

저는 spring-WS를 사용하고 jaxb marshaller를 사용하고 있습니다. 우리는 어떻게이 일을 할 수 있습니까?

+0

어느 라인은 예외가 던져되고있다? 우리가 전체 스택 추적을 보여줍니다. – skaffman

+0

Error는'element.soapBody.appendChild (element);'행'element'가'JAXBElement' 유형 인 오류입니다. 다음은 스택 추적입니다. java.lang.ClassCastException : javax.xml.bind.JAXBElement를 org.w3c.dom.Element로 캐스팅 할 수 없습니다. \t (com.staples.onas.util.ONASUtil.createPublishLog (ONASUtil.java : 158) \t com.staples.onas.service.endpoint.OrderNumberServiceEndPoint.processOrderNumberRequest (OrderNumberServiceEndPoint.java:73) \t at sun.reflect.NativeMethodAccessorImpl.invoke0 (네이티브 메소드)'. 크기 제한으로 인해 여기에 전체 스택 추적을 붙여 넣을 수 없습니다. 자세한 내용이 필요한 경우 알려 주시기 바랍니다. –

답변

4

기본적으로, 당신은 당신의 엉덩이를 긁기 위해 당신의 어깨 너머로 가야합니다.

JAXBContext를 사용하여 마샬 러를 생성하여 모두 문자열로 변환합니다. 그런 다음 문자열을 xml 요소로 변환합니다.

하나 이상의 옵션이 있습니다. XmlBeans를 사용하여 클래스를 작성하십시오 (그러면 JAXB를 사용하기 어렵고 따라서 JAX-WS가됩니다).

+0

롤 @이 답변을 시작하는 표현 :) –

6

은 내가 조금 더 우아한 해결책을 함께 생각 :

// Having a SOAPMessage message and a JAXBContext context... 
// Marshall the JAXB object request into to a DOM document 
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 
final Marshaller marshaller = context.createMarshaller(); 
marshaller.marshal(request,document); 

// Finally attach the document to the message and save. Done! 
soapBody.addDocument(document); 
message.saveChanges(); 
관련 문제