小编Dav*_*ave的帖子

JAXB + Spring WS:使用JAXBElement时"没有端点适配器"

我有一个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)

java web-services spring-ws jaxb

8
推荐指数
2
解决办法
1万
查看次数

Spring Soap拦截器如何修改消息的内容?

我正在尝试为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)

我希望其他人可能已经解决了这个特殊问题.任何见解将不胜感激.谢谢.

java soap web-services spring-ws

5
推荐指数
1
解决办法
9989
查看次数

标签 统计

java ×2

spring-ws ×2

web-services ×2

jaxb ×1

soap ×1