我特别需要SOAP端点。我们在我的组织中使用spring ws 2.4.0框架。
我们真正需要的是一个端点,它自己获取SOAP消息并返回一个String。消息有效负载是XML数据。我们需要做的就是使用MessageContext对象完成。我们不需要解组的XML等。
我一直在做一些实验,但最终总是出现以下错误:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x14d06fe0 {Error Domain=NSOSStatusErrorDomain Code=-12983 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-12983)}
我现在可能有大量不必要的配置搞乱了我的Spring ws框架。所以任何想法如何以最小的配置做到这一点:
最好跳过XML-> POJO转换,因为有效负载XML large
答案 0 :(得分:0)
您可以使用DomPoxMessageFactory和您自己编写的MessageEndpoint的简单实现来实现此目的。像这样:
@Override
public void invoke(MessageContext messageContext) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
messageContext.getRequest().writeTo(out);
String message = out.toString();
...
}
您的弹簧配置包含:
<bean id="messageReceiver" class="com.yourcompany.MessageReceiver"/>
<bean id="messageFactory" class="org.springframework.ws.pox.dom.DomPoxMessageFactory">
</bean>
<!-- Register PayloadRootAnnotationMethodEndpointMapping -->
<bean class="org.springframework.ws.server.endpoint.mapping.SimpleMethodEndpointMapping">
<property name="interceptors">
<list>
<ref bean="loggingInterceptor"/>
</list>
</property>
<property name="defaultEndpoint" ref="fileReceiver"/>
<property name="endpoints">
<list>
<ref bean="fileReceiver"/>
</list>
</property>
</bean>
<bean id="endpointAdapter" class="org.springframework.ws.server.endpoint.adapter.MessageEndpointAdapter"/>
<bean id="loggingInterceptor" class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
</bean>
<bean id="handlerAdapter" class="org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter">
<property name="messageFactory" ref="messageFactory"/>
</bean>
<bean id="wsdlName" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schema" ref="schema"/>
<property name="portTypeName" value="MyInterface"/>
<property name="locationUri" value="/ws/somepath/"/>
<property name="targetNamespace" value="http://test.yourcompany.com/" />
<property name="createSoap12Binding" value="true" />
<property name="createSoap11Binding" value="false" />
</bean>
<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
<property name="xsd" value="WEB-INF/schema.xsd"/>
</bean>
您在端点中获取的消息字符串将包含整个XML,因此包括SOAP信封等。如果您只想要邮件正文,请执行
messageContext.getRequest()。getPayloadSource()
并且您将获得有效负载的DOM源,您可以在其中查找包含消息内容的节点。 (第一个子节点是包络,该节点的索引3处的子节点是主体。)