对于SOAP服务的响应,我确实遇到了解压缩问题。我使用springboot应用程序和WebServiceTemplate来调用现有的SOAP服务。我正在使用下面的代码为编组和webservicetemplate设置bean。任何帮助都是非常感谢的。
打电话给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;
}发布于 2017-08-11 16:40:43
根据Spring的文档,WebServiceTemplate.marshalSendAndReceive(Object requestPayload)
发送包含给定有效负载的web服务消息,该消息由配置的Marshaller编组。返回响应消息(如果有的话)的解组有效负载。这将只适用于指定的默认uri!
因此,您可以这样做,以返回预期的响应。
JAXBElement<TravelResponse> res = (JAXBElement<TravelResponse>) webServiceTemplate.marshalSendAndReceive(request);
return res.getValue();发布于 2018-07-01 07:30:51
尝试JaxbIntrospector.getValue从JAXB元素获得实际响应。
TravelResponse反应= JaxbIntrospector.getValue(jaxbElement);
https://stackoverflow.com/questions/45607491
复制相似问题