不使用附件的SOAP消息

时间:2014-03-31 11:02:17

标签: java xml web-services soap mtom

我正在使用基于64位编码的二进制数据对象来使用Web服务。相应的xsd元素如下所示:

<xs:element name="Document" maxOccurs="unbounded"
                xmime:expectedContentTypes="application/octet-stream">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:base64Binary">
                <xs:attribute name="id" type="xs:anyURI" use="required">
                    <xs:annotation>
                        <xs:documentation>documentation text...</xs:documentation>
                    </xs:annotation>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

使用带有jbossws-cxf-client的maven-jaxws-tools-plugin生成我的类(本机客户端导致相同的错误)后似乎缺少某些东西。无论我如何尝试启用MTOM,它都不会发送任何附件,但它会将二进制数据保存在主xml中。我尝试配置SOAPBinding,并使用带有和不带阈值的MTOMFeature创建了端口。基本上它总是这样。

<ns4:Document id="Document01">dGhpcyBpcyBzYW1wbGUgZG9jdW1lbnQgbm8uIDE=</ns4:Document>

xsd文件中是否有错误,插件是问题还是只是我遗忘了什么?

-

使用另一个插件(jaxws-maven-plugin)生成类后,我在控制台中收到了一个有趣的警告。它告诉我xmine:expectedContentType属性存在于无效元素中。我非常确定我看到了几个这样做的例子完全相同,所以我不知道这是否会导致任何问题。

这没有改变任何东西,我发现这些课很好。

-

这似乎是我们的一个Handler实现中的这个方法调用的一个问题:

ctx.getMessage();

ctx是SOAPMessageContext对象,它放在SOAPHandler实现的handleMessage方法中。执行此方法后,请求中将不会有任何附件。我很好奇getter如何禁用整个请求的附件。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我终于设法找到了这种行为的原因。有一个错误无法修复导致它。可在此处找到相应的故障单:https://java.net/jira/browse/WSIT-1320

对于解决方法,您可以访问此博客文章,在那里我找到了有关此主题的一些信息: http://blog.toshredsyousay.com/post/43379955341/the-trouble-with-soaphandlers-and-mtom#fn:p43379955341-8