Xsd jaxws客户端在发送Base64二进制数据时添加边界信息

Xsd jaxws客户端在发送Base64二进制数据时添加边界信息,xsd,base64,weblogic,jax-ws,mtom,Xsd,Base64,Weblogic,Jax Ws,Mtom,我有java模块(ear),jaxws客户端调用外部系统并传递Base64二进制信息。 我有一个包含以下元素的wsdl: <xsd:element minOccurs="0" maxOccurs="1" name="content" type="xsd:base64Binary"/> 它显示该功能已禁用 为什么会发生这种情况?我怎样才能修好它?如何删除边界信息?经过研究,我找到了发生这一切的原因 我使用

我有java模块(ear),jaxws客户端调用外部系统并传递Base64二进制信息。 我有一个包含以下元素的wsdl:

<xsd:element minOccurs="0" maxOccurs="1" name="content" type="xsd:base64Binary"/>
它显示该功能已禁用


为什么会发生这种情况?我怎样才能修好它?如何删除边界信息?

经过研究,我找到了发生这一切的原因

我使用SoapHandler记录(并且只记录)我的请求/响应

如果我把它取下来,一切都很好。文件内容按预期发送,没有任何附件和边界信息

我在soapHandler中添加了几行:

if ((Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {                
   context.getMessage().removeAllAttachments();
   context.getMessage().getMimeHeaders().removeAllHeaders();
   
   context.getMessage();
}
这样就从请求中删除了所有不需要的信息,并且它与soapHandler的预期效果一样

<content>dGhpbmsgYWJvdXQgaXQ=</content>
logger.info("MTOM is enabled={}",((SOAPBinding)((BindingProvider) port).getBinding()).isMTOMEnabled());
if ((Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {                
   context.getMessage().removeAllAttachments();
   context.getMessage().getMimeHeaders().removeAllHeaders();
   
   context.getMessage();
}