Java 如何禁用cxf SOAP客户端使用多部分请求
我必须调用一个不支持多部分请求的专有服务,我没有发送任何附件,但cxf似乎创建了一个多部分请求Java 如何禁用cxf SOAP客户端使用多部分请求,java,soap,cxf,multipart,cxf-client,Java,Soap,Cxf,Multipart,Cxf Client,我必须调用一个不支持多部分请求的专有服务,我没有发送任何附件,但cxf似乎创建了一个多部分请求 POST /endpoint HTTP/1.1 Content-Type: multipart/related; type="text/xml"; boundary="uuid:86ebef4f-fc2a-431b-a21b-37e86b4901f9"; start="<root.message@cxf.apache.org>"; start-info="text/xml" Accept:
POST /endpoint HTTP/1.1
Content-Type: multipart/related; type="text/xml"; boundary="uuid:86ebef4f-fc2a-431b-a21b-37e86b4901f9"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Accept: */*
Authorization: Basic U1dHMTAwNTA6MTIzNDU1
SOAPAction: "XYZ.0050"
User-Agent: Apache-CXF/3.3.6
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:8082
Connection: keep-alive
Content-Length: 2134
--uuid:86ebef4f-fc2a-431b-a21b-37e86b4901f9
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>
[etc...]
如何强制cxf使用非多部分请求?看起来,只要存在
@XmlAttachmentRef
/DataHandler
属性,cxf就会创建一个多部分请求,在我的情况下,它从未被使用,所以我将其从类中删除
更好的解决方案是通过定义拦截器移除器从拦截器链中移除swoutinterceptor
类拦截器remover:AbstractSoapInterceptor(Phase.PRE_逻辑){
初始化{
addBefore(swoutInterceptor::class.java.name)
}
覆盖有趣的handleMessage(消息:SoapMessage?){
如果(消息!=null){
val res=message.interceptorChain.firstOrNull(){它是swoutinterceptor}
如果(res!=null){
message.interceptorChain.remove(res)
}
}
}
}
并将其添加到链中:
val client=ClientProxy.getClient(端口)
client.outInterceptors.add(InterceptorRemover())
看起来,只要有@XmlAttachmentRef
/DataHandler
属性,cxf就会创建一个多部分,在我的例子中,它从未被使用过,所以我将其从类中删除
更好的解决方案是通过定义拦截器移除器从拦截器链中移除swoutinterceptor
类拦截器remover:AbstractSoapInterceptor(Phase.PRE_逻辑){
初始化{
addBefore(swoutInterceptor::class.java.name)
}
覆盖有趣的handleMessage(消息:SoapMessage?){
如果(消息!=null){
val res=message.interceptorChain.firstOrNull(){它是swoutinterceptor}
如果(res!=null){
message.interceptorChain.remove(res)
}
}
}
}
并将其添加到链中:
val client=ClientProxy.getClient(端口)
client.outInterceptors.add(InterceptorRemover())
我尝试了此解决方案,但对我无效。我需要发送一个请求来检索文件(因此我无法删除DataHandler元素)。但是请求不能是多部分内容类型。移除SwoutInterceptor似乎不起作用。我已经用POJO和有效负载消息类型尝试过了。我遗漏了什么吗?我尝试过这个解决方案,但对我来说不起作用。我需要发送一个请求来检索文件(因此我无法删除DataHandler元素)。但是请求不能是多部分内容类型。移除SwoutInterceptor似乎不起作用。我已经用POJO和有效负载消息类型尝试过了。我错过什么了吗?
POST /endpoint HTTP/1.1
Content-Type: text/xml;charset=UTF-8
Accept: */*
Authorization: Basic U1dHMTAwNTA6MTIzNDU1
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:8082
Pragma: no-cache
SOAPAction: "XYZ.0050"
User-Agent: Apache-CXF/3.3.6
Content-Length: 2114
[etc...]