Java jax ws:服务器端不支持的媒体异常内容类型
我的soap客户端正在发出成功的请求,并从soap服务器获得200 OK。但是,由于缺少内容类型标头,应用程序出错。我试图在处理程序中添加内容类型头,但甚至没有调用它(使用调试器,我可以看到,对于入站消息,该方法从未命中,但对于出站消息,该方法被命中) 以下是处理程序代码:Java jax ws:服务器端不支持的媒体异常内容类型,java,web-services,jax-ws,Java,Web Services,Jax Ws,我的soap客户端正在发出成功的请求,并从soap服务器获得200 OK。但是,由于缺少内容类型标头,应用程序出错。我试图在处理程序中添加内容类型头,但甚至没有调用它(使用调试器,我可以看到,对于入站消息,该方法从未命中,但对于出站消息,该方法被命中) 以下是处理程序代码: public class ClientHandler implements SOAPHandler<SOAPMessageContext> { public boolean handleMessa
public class ClientHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext context) {
if ((Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
System.out.println(" here: in outbound call");
}
if (!(Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
Map<String, List<String>> headers = (Map<String, List<String>>)context.get(MessageContext.HTTP_RESPONSE_HEADERS);
List<String> value = new ArrayList<String>();
value.add("text/xml");
if (headers != null) {
headers.put("content-type", value);
} else {
Map<String, List<String>> brandNewHeaders = new HashMap<String, List<String>>();
brandNewHeaders.put("content-type", value);
context.put(MessageContext.HTTP_RESPONSE_HEADERS, brandNewHeaders);
}
}
return true;
}
也许我弄错了,但是来自客户机的请求似乎是有效的,问题是来自服务器的响应,它没有内容类型,并且包含无效的SOAP XML(请参阅缺少SOAP头标记和正文开始标记)。错误不在客户端,而是在服务器上。是的,我知道它在服务器端。我正在尝试将内容类型头添加到从服务器返回的响应对象。但在我的处理程序之前,异常是thrownooh,所以您试图修复传入的无效soap?必须通过SOAP进行通信本身就是一件麻烦的事,必须像你一样施魔法是一件很深的事!祝你好运:)也许我弄错了,但是来自客户端的请求似乎是有效的,问题是来自服务器的响应,它没有内容类型,并且包含无效的SOAP XML(请参阅缺少的SOAP头标记和正文开始标记)。错误不在客户端,而是在服务器上。是的,我知道它在服务器端。我正在尝试将内容类型头添加到从服务器返回的响应对象。但在我的处理程序之前,异常是thrownooh,所以您试图修复传入的无效soap?必须通过SOAP进行通信本身就是一件麻烦的事,必须像你一样施魔法是一件很深的事!祝你好运:)
WSGService service = new WSGService();
appPort = service.getWSGHttpPort();
final Binding binding = ((BindingProvider) provisionPort).getBinding();
BindingProvider bp = (BindingProvider)provisionPort;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, provisionurl);
List<Handler> handlerList = new ArrayList<>();
handlerList.add(new ClientHandler());
binding.setHandlerChain(handlerList);
---[HTTP request - https://foobar/url]---
Accept: [text/xml, multipart/related]
Content-Type: [text/xml; charset=utf-8]
SOAPAction: ["/FOOBARWSG"]
User-Agent: [JAX-WS RI 2.2.4-b01]
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body>**BODY**</S:Body></S:Envelope>--------------------
---[HTTP response - https://foobar/url - 200]---
null: [HTTP/1.0 200 OK]
Access-Control-Allow-Headers: [Content-Type, Accept, Accept-Encoding, Content-Encoding, X-Client-UID, Authorization, X-Associated-Id]
Access-Control-Allow-Methods: [GET, POST, PUT, DELETE]
Access-Control-Allow-Origin: [*]
Access-Control-Expose-Headers: [WWW-Authenticate]
Connection: [close]
Content-Length: [2915]
content-type: []
Date: [Tue, 31 Jan 2017 06:24:05 GMT]
Server: [JBOSS Application Server]
X-WsgSource: [DUMMY,15,2017-01-31 06:24:05]
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns></SOAP-ENV:Body></SOAP-ENV:Envelope>--------------------
22:24:07,605 ERROR ErrorPageFilter:180 - Forwarding to error page from request [/dummy/customerType/null] due to exception [Unsupported Content-Type: Supported ones are: [text/xml]]
com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: Supported ones are: [text/xml]
this.checkStatusCode(responseStream, con);
Packet reply = request.createClientResponse((Message)null);
reply.wasTransportSecure = con.isSecure();
if(responseStream != null) {
String contentType = con.getContentType();
if(contentType != null && contentType.contains("text/html") && this.binding instanceof SOAPBinding) {
throw new ClientTransportException(ClientMessages.localizableHTTP_STATUS_CODE(Integer.valueOf(con.statusCode), con.statusMessage));
}
this.codec.decode(responseStream, contentType, reply);
}