Java 无法修改SOAPWebService客户端-JAX-WS2.2.10-JDK1.7中的http接受头

Java 无法修改SOAPWebService客户端-JAX-WS2.2.10-JDK1.7中的http接受头,java,http-headers,jax-ws,webservice-client,Java,Http Headers,Jax Ws,Webservice Client,我将一个webservice客户机从jdk1.6JAX ws(v1?一个旧的-2005)迁移到jdk1.7JAX ws 2.2.10。 旧的功能正常,但我对新的有一个问题: 该服务(来自另一个社会,php服务器)响应我:http 406错误,不可接受 我发送的accept标头是: Accept: text/xml, multipart/related Content-Type: text/xml; charset=utf-8 对于旧版本,我有: Accept: text/xml, multip

我将一个webservice客户机从jdk1.6JAX ws(v1?一个旧的-2005)迁移到jdk1.7JAX ws 2.2.10。 旧的功能正常,但我对新的有一个问题: 该服务(来自另一个社会,php服务器)响应我:http 406错误,不可接受

我发送的accept标头是:

Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
对于旧版本,我有:

Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-type: text/xml;charset="utf-8"
因此,我尝试这样修改http头(在绑定处理程序链中的新处理程序中):

在我的客户中:

    javax.xml.ws.Binding binding = ((BindingProvider) ServiceXXX).getBinding();
    List<Handler> hchain = binding.getHandlerChain();
    if (hchain == null) {hchain = new ArrayList<Handler>();}
    hchain.add(new HTTPUserAgentHandler());
    binding.setHandlerChain(hchain);
服务器(显然是1.1版)需要我发送一个带有“*/*”
你知道我该怎么做吗?

我想我找到了一种方法,这不是完美的解决方案。。。(如果某人有更好的…) 因此: 我在
/src/META-INF/services
中添加了一个名为
com.sun.xml.ws.api.pipe.TransportTubeFactory
的文件,其中有:

com.YYY.XXX.MonHttpTransportTubeFactory
我添加了这个类:

package com.YYY.XXX;

import com.sun.xml.ws.api.pipe.ClientTubeAssemblerContext;
import com.sun.xml.ws.api.pipe.TransportTubeFactory;
import com.sun.xml.ws.api.pipe.Tube;
import com.sun.xml.ws.transport.http.client.HttpTransportPipe;

public class MonHttpTransportTubeFactory extends TransportTubeFactory{

    @Override
    public Tube doCreate(ClientTubeAssemblerContext context) {
        context.setCodec(new MonSOAPBindingCodec(context.getBinding().getFeatures()));
        return new HttpTransportPipe(context.getCodec(), context.getBinding());
    }
}
还有这个:(现有的
SOAPBidingCodec
jaxws-ri-src的副本):

因此,服务调用my
HttpTransportTubeFactory
,并包含我的自定义SOAP编解码器

它不是很漂亮,但很管用

com.YYY.XXX.MonHttpTransportTubeFactory
package com.YYY.XXX;

import com.sun.xml.ws.api.pipe.ClientTubeAssemblerContext;
import com.sun.xml.ws.api.pipe.TransportTubeFactory;
import com.sun.xml.ws.api.pipe.Tube;
import com.sun.xml.ws.transport.http.client.HttpTransportPipe;

public class MonHttpTransportTubeFactory extends TransportTubeFactory{

    @Override
    public Tube doCreate(ClientTubeAssemblerContext context) {
        context.setCodec(new MonSOAPBindingCodec(context.getBinding().getFeatures()));
        return new HttpTransportPipe(context.getCodec(), context.getBinding());
    }
}
public class MonSOAPBindingCodec extends MonMimeCodec implements com.sun.xml.ws.api.pipe.SOAPBindingCodec {
...
    public MonSOAPBindingCodec(WSFeatureList features, StreamSOAPCodec xmlSoapCodec) {
        super(getSoapVersion(features), features);

        this.xmlSoapCodec = xmlSoapCodec;
        xmlMimeType = xmlSoapCodec.getMimeType();

        String clientAcceptedContentTypes = xmlSoapCodec.getMimeType() + ", */*";

        WebServiceFeature fi = features.get(FastInfosetFeature.class);
...