Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何禁用cxf SOAP客户端使用多部分请求_Java_Soap_Cxf_Multipart_Cxf Client - Fatal编程技术网

Java 如何禁用cxf SOAP客户端使用多部分请求

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:

我必须调用一个不支持多部分请求的专有服务,我没有发送任何附件,但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: */*
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...]