2017-08-10 73 views
0

我真的被来自SOAP服务的响应的解组问题困扰着。我使用springboot应用程序和WebServiceTemplate来调用现有的SOAP服务。我正在使用下面的代码来设置用于编组和webservicetemplate的bean。任何帮助,高度赞赏。Springboot SOAP服务解组来自WebServiceTemplate的响应问题

打电话webServiceTemplate.marshalSendAndReceive(request);我期待TravelResponse object,但它给我JAXBElement<TravelResponse> object作为回应。我需要帮助理解
1)为什么是让上面的响应,而不是TravelResponse 2)如何转换为TravelResponse

代码片断如下:

@Bean 
    Jaxb2Marshaller jaxb2Marshaller() { 
    Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller(); 
    jaxb2Marshaller.setContextPath("com.cater.trip.simple_api.trip.v1"); 
    return jaxb2Marshaller; 
    } 

    @Bean 
    public WebServiceTemplate webServiceTemplate() throws Exception { 
    WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); 
    webServiceTemplate.setMessageFactory(getMessageFactory()); 
    webServiceTemplate.setMarshaller(jaxb2Marshaller()); 
    webServiceTemplate.setUnmarshaller(jaxb2Marshaller()); 
    webServiceTemplate.setDefaultUri(defaultUri); 
    webServiceTemplate.setMessageSender(getMessageSender()); 
    return webServiceTemplate; 
    } 

    @Bean 
    public SaajSoapMessageFactory getMessageFactory() { 
     return new SaajSoapMessageFactory(); 
    } 

    @Bean 
    public HttpComponentsMessageSender getMessageSender() {   
     return new HttpComponentsMessageSender(); 
    } 


@Override 
public Object getData() { 
    ObjectFactory clientFac = new ObjectFactory(); 
    TravelRequest request = populateRequest(clientFac);  
    TravelResponse res = (TravelResponse) webServiceTemplate.marshalSendAndReceive(request); 
    return res; 
} 

回答

1

按照Spring的文档,WebServiceTemplate.marshalSendAndReceive( )返回非解组响应。

所以,你可以这样做来返回预期的响应。 JAXBElement res =(JAXBElement)webServiceTemplate.marshalSendAndReceive(request);其中,JAXBElement res =(JAXBElement)webServiceTemplate.marshalSendAndReceive(request);

return res.getValue();