在 java 网络服务调用中不支持 Content-type:application/json

Unsupported Content-type:application/json in java webservice call

我可以使用 cxf 库设置内容类型,但我不知道如何设置授权 header。每当我设置用户名和密码时,它都会设置 Authorization header 并对整个值进行编码并添加 Basic。我不想这样做。我想用我提供的纯字符串添加 Authorization header 。请帮我解决这个问题。

AMPServices services = new AMPServices();
        CoreXmlPort coreXmlPort = services.getAMPSoapService();
        Client client = ClientProxy.getClient(coreXmlPort);           

        HTTPConduit httpConduit = (HTTPConduit) client.getConduit();

        HTTPClientPolicy httpClientPolicy=httpConduit.getClient();
        String contentType=httpClientPolicy.getContentType();
        contentType="application/soap+xml; type=vnd.iShip.AMP.SOAP; charset=UTF-8";
        httpClientPolicy.setContentType(contentType);

        AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
        authorizationPolicy.setUserName("username");
        authorizationPolicy.setPassword("password");

        httpConduit.setAuthorization(authorizationPolicy);

它生成以下请求 xml。

POST https://api.iship.com/Root/Enterprises/Pitney%20Bowes/Progistics; HTTP/1.1
Content-Type: application/soap+xml; type=vnd.iShip.AMP.SOAP; charset=UTF-8
Accept: */*
Authorization: Basic aXNoaXAgcGIvd3NkZXZlbDowNzZhNjFjYTM5MDcxODAxODVjNWRkMjM2YTdkMzZhNGQ1ODg5OWFj
User-Agent: Apache CXF 3.1.0
Cache-Control: no-cache
Pragma: no-cache
Host: api.iship.com
Connection: keep-alive
Content-Length: 246

但我想要这种类型的请求

POST https://api.iship.com/Root/Enterprises/Pitney%20Bowes/Progistics; HTTP/1.1
Content-Type: application/soap+xml; type=vnd.iShip.AMP.SOAP; charset=UTF-8
Accept: */*
Authorization: username;password
User-Agent: Apache CXF 3.1.0
Cache-Control: no-cache
Pragma: no-cache
Host: api.iship.com
Connection: keep-alive
Content-Length: 246

但是我做不到。请帮我解决这个问题。

谢谢, 阿瓦亨德拉

这里的问题是您用来与 Web 服务交互的客户端期望基于 XML 的 Soap 消息,而该服务正在 JSON 作为 return 媒体提供服务。

要么将您的客户端转换为使用 JSON 格式并使用该格式进行通信,要么使用基于 XML 的端点,请咨询网络服务提供商。

我认为您尝试调用的是 RestFul 服务,这就是为什么服务器端总是以与您预期不同的内容类型进行响应(json 而不是 soap/xml ).您的 url 端点是否基于 http 协议?如果是,您是否需要向此 url 发送额外的参数?