我正在使用一个带有二进制数据对象的网络服务,该对象是 base 64 编码的。相应的 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>
使用 maven-jaxws-tools-plugin 和 jbossws-cxf-client 生成我的类后(本机客户端导致相同的错误),似乎缺少一些东西。无论我如何尝试启用 MTOM,它都不会发送任何附件,但它将二进制数据保存在主 xml 中。我尝试配置 SOAPBinding,并使用带有和不带阈值的 MTOMFeature 创建了端口。基本上它总是看起来像这样。
<ns4:Document id="Document01">dGhpcyBpcyBzYW1wbGUgZG9jdW1lbnQgbm8uIDE=</ns4:Document>
xsd 文件中是否有错误,是插件有问题还是只是我忘记了什么?
--
使用另一个插件(jaxws-maven-plugin)生成类后,我在控制台中收到了一个有趣的警告。它告诉我 xmine:expectContentType 属性存在于无效元素中。我很确定我看到了几个以完全相同的方式这样做的例子,所以我不知道这是否会导致任何问题。
这并没有改变任何东西,我发现课程很好。
--
在我们的处理程序实现之一中,此方法调用似乎存在问题:
ctx.getMessage();
ctx 是放入 SOAPHandler 实现的 handleMessage 方法中的 SOAPMessageContext 对象。一旦执行此方法,请求中就不会有附件。我很好奇 getter 如何禁用整个请求的附件。有什么想法吗?
我终于设法找到了这种行为的原因。有一个错误不会得到修复,导致它。相应的票可以在这里找到:https://java.net/jira/browse/WSIT-1320
有关解决方法,您可以转到此博客文章,这是我找到有关此主题的一些信息的地方:http://blog.toshredsyousay.com/post/43379955341/the-trouble-with-soaphandlers-and-mtom#fn:p43379955341-8