我正在尝试使用 JAX-WS 使用 Exchange 2010 Web 服务界面。我正在使用 JAX-WS 2.2 RI (Metro 2.0)。 2.1也出现了同样的问题。
我在使用 Exchange 时遇到了麻烦,它返回“HTTP/1.1 415 无法处理消息,因为内容类型“text/xml;charset=utf-8”不是预期类型“text/xml;charset=utf-8”。”作为响应(2.1 引用了字符集值,否则相同的响应)。
显然,我需要指定确切的内容类型 header ,以使 Exchange 满意。
有没有办法让我在不强制我手动重建依赖项的情况下做到这一点?我目前依赖于已发布的 Maven 工件,并且如果可能的话,希望继续这样做。
使用进程是一个常规的 J2SE 应用程序,看不到任何容器。我可以控制应用程序,并且可以添加应用程序范围所需的几乎所有内容,但无法添加代理服务器等进程外项目。客户端类是从本地 WSDL 生成的,但字符集规范是从 jaxws RI 实现中声明的常量派生的,而不是生成的代码。因此,生成的 HTTP 传输由 Sun JRE5 或 JRE6 中的标准 http/https 客户端处理。
最佳答案
来自this thread (提供缓存的链接,因为当前 java.net 论坛已关闭),看来问题最终是由于您的 Exchange Web Service 2010 要求分号后有一个空格 - 这不是 w3c 规范的一部分。
解决方案可能是在 Metro 前面放置一些东西(取决于您的设置)来更改标题。
您可以尝试以下一些方法:
- 使用反射来更改 Metro 常数。
- 使用 AOP(我无法告诉你具体如何使用)
- 查看 Metro 中定义此常量的位置,在源代码中创建包
javax.xml.ws.etc
(或com.sun.etc..
),然后复制粘贴该类的源代码,更改常量。
关于java - 通过 jax-ws Metro 使用 Exchange Web Service 2010 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913856/