java - 通过 jax-ws Metro 使用 Exchange Web Service 2010 时出现问题

标签 java web-services jax-ws java-metro-framework

我正在尝试使用 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/

相关文章:

java - JAX-WS - 作为 POJO 的服务实现

java - 使用现有的 http 客户端进行 SOAP 调用

java - 计算句子中两个单词的共现次数(java)

java - 类路径下spring.xml的打印路径

api - Amazon.com 产品广告 API 请求限制是多少?

java - InputStream 在 MessageBodyReader Jersey 中提供空数据

java - 是否可以通过编程方式控制 set-jaxb-validation-event-handler?

java - 无法让 JTable 出现在 GUI 上..我错过了什么?

java - Apache Felix 文件安装无法正常工作

java - 从 HTML 调用 REST Web 服务