我有一个Web服务,我试图使用Spring和Jaxb实现.我已经使用这两种方法提供了一些工作服务 - 但由于响应的格式,这项特殊服务给我带来了困难.在我的XSD中,响应定义如下(注意它是单个元素):
<!-- Response definition -->
<element name="ServiceResponse" type="Q1:Outcome"/>
<!-- Outcome definition -->
<complexType name="Outcome">
<sequence>
<element name="ErrorCode">
<simpleType>
<restriction base="string">
<maxLength value="8"/>
</restriction>
</simpleType>
</element>
<element name="ErrorText">
<simpleType>
<restriction base="string">
<maxLength value="1000"/>
</restriction>
</simpleType>
</element>
<element name="DocumentId">
<simpleType>
<restriction base="string">
<maxLength value="30"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样的服务方法:
@PayloadRoot( localPart = SERVICE_REQUEST, namespace = NAMESPACE )
public Outcome processFileRequest( ServiceRequest requestObject )
Run Code Online (Sandbox Code Playgroud)
我最终得到一个如下所示的异常:
java.lang.IllegalStateException:没有适配器端点[公共dortman.xsd.objects.Outcome dortman.annotated.MyTestEndpoint.processFileRequest(dortman.xsd.objects.ServiceRequest)]:请问您的端点实现类似的MessageHandler或PayloadEndpoint支持的接口?
在Spring论坛和Stackoverflow上找到一些相关帖子之后,似乎返回对象需要具有XmlRootElement注释或包含在JAXBElement中.为了尝试第一个,我将XSD中的响应更改为:
<!-- Response definition -->
<element name="ServiceResponse">
<complexType>
<sequence>
<element name="FileSize" type="long"/>
</sequence> …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Web服务编写一个拦截器,它将在发送到端点之前修改Soap消息的内容.如果客户端发送了一个消息,其中某个元素的值为1,我希望能够将该元素更改为2,这样,当消息到达端点时,它看起来好像客户端提交了2而不是我不确定这是一项困扰我的艰巨任务,还是一项我正在努力实现的艰巨任务.
我已经介入了一些Spring拦截器; 但是验证和日志记录拦截器并不是每个都会改变传输中的消息.Wss4jSecurityInterceptor确实为MessageContext添加了一些属性; 但我无法利用它正在做的任何事情.我有一个拦截器的外壳; 但没有任何东西可以做任何有价值的事情.
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception {
SaajSoapMessage saajSoapMessage = (SaajSoapMessage) messageContext
.getRequest();
SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
return true;
}
Run Code Online (Sandbox Code Playgroud)
我希望其他人可能已经解决了这个特殊问题.任何见解将不胜感激.谢谢.