我必须连接到只能理解Content-Type(capital-T)而不是Content-type的执行不良的服务器.如何让我的JAX-WS客户端发送Content-Type?

我试过了:

Map<String,List<String>> headers = (Map<String,List<String>>)
((BindingProvider)port).getRequestContext().get(MessageContext.HTTP_Request_HEADERS);

但标题为空.我究竟做错了什么?

解决方法

I have to connect to a poorly implemented server that only understands Content-Type(capital-T) and not Content-type. How can I ask my jax-ws client to send Content-Type?

我更多地挖了这个问题,可悲的是,我恐怕答案是:你不能.让我分享一下我的发现.

首先,您将在https://jax-ws.dev.java.net/guide/HTTP_headers.html中找到的代码不会访问未来HTTP请求的HTTP标头(此时尚未创建),它允许您设置其他HTTP标头以进行请求(这将被添加到HTTP请求).

所以,不要期望以下代码不返回null,如果你没有放任何东西(实际上,你只会得到你放在那里):

((BindingProvider)port).getRequestContext().get(MessageContext.HTTP_Request_HEADERS);

然后,我根据同一链接中提供的代码进行了一些测试:

AddNumbersImplService service = new AddNumbersImplService();
AddNumbersImpl port = service.getAddNumbersImplPort();

((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_Request_HEADERS,Collections.singletonMap("X-Client-Version",Collections.singletonList("1.0-RC")));

port.addNumbers(3,5);

这是我在运行客户端代码时在HTTP请求中看到的:

POST /q2372336/addnumbers HTTP/1.1
Content-type: text/xml;charset="utf-8"
X-client-version: 1.0-RC
Soapaction: ""
Accept: text/xml,multipart/related,text/html,image/gif,image/jpeg,*; q=.2,*/*; q=.2
User-Agent: JAX-WS RI 2.1.6 in JDK 6
Host: localhost:8080
Connection: keep-alive
Content-Length: 249

你注意到了区别:只有X-Client-Version头文件的第一个字符被保留在上面,其余的被降低了!

实际上,如果您检查用于表示HTTP请求(和响应)标题的类c.s.x.w.t.Headers,则会在添加时对其进行“规范化”(normalize(String)):

/* normalize the key by converting to following form.
 * First char upper case,rest lower case.
 * key is presumed to be ASCII 
 */
 private String normalize (String key) {
     ...
 }

所以,虽然c.s.x.w.t.h.c.HttpTransportPipe类(我的理解是这是HTTP请求的创建位置,这也是以前添加的头将被添加到HTTP请求头),实际上在“c.s.x.w.t.Headers”实例中添加了“Content-Type”作为关键字,由于前面提到的实现细节,密钥将被修改.

我可能是错的,但是如果没有修补代码,我看不出有什么可以改变的.奇怪的是,我不认为这个“规范化”的东西是符合RFC的(没有检查哪些RFC对标题的说法).我很惊讶.其实你应该是raise an issue.

所以我在这里看到三个选项(因为等待修复可能不是一个选项):

>自己修补代码并重建JAX-WS RI(具有这种方法的所有缺点).>为您的客户端尝试另一个JAX-WS实现,如CFX.>让请求通过某种自定义代理来即时修改标题.

java – jax-ws将内容类型更改为Content-Type,因为服务器超级敏感的更多相关文章

  1. java – 使用JAX-WS更改运行时生成的WSDL中的schemaLocation和soap:address位置

    是否可以在JAX-WSWSDL中配置位置?当我部署下面的示例时,’servername’将是localhost,’serverport’将是Web应用程序的本地端口号.但是,我想将这些重新配置为代理服务器名称和重定向到服务的服务器端口.这是可能的,我将如何实现它?

  2. Java – 使用带有JAX-WS的动态客户端的优点

    使用带有JAX-WS服务的动态客户端与仅使用生成的客户端类相比有什么优势?**对于我的特定情况,我使用ApacheCXF,我不确定其他库允许“动态”客户端.–我想我不需要添加这个,但是……我正在寻找非显而易见的(我知道……

  3. java – 有没有人在Metro上本地解析schemaLocation的jax-ws-catalog.xml?

    解决方法你在哪里放置jax-ws-catalog.xml和WSDL文件?

  4. java – JAX-WS,认证和授权 – 如何?

    在Web服务中进行身份验证和授权的最佳方式是什么?>我应该使用什么样的令牌?>如何在通话之间传递这个令牌?是另一个系统用户驱动/一些后台进程?什么是确切的需要,您只想要第一个服务呼叫通过身份验证过程而不是后续呼叫?

  5. java – 使用JAX-WS在WebLogic中没有模式导入的单个WSDL

    如何使用JAX-WS配置WebLogic10.3.6生成的Web服务,以将对象模式包含在单个WSDL文件声明中,而不是导入声明?

  6. java – 我的jax-ws webservice客户端只返回空对象

    我有一个第三方Web服务,我使用wsimport生成一个客户端.每次对webservice的调用都会成功完成,但是我得到的响应对象的所有字段都设置为null.监视网络我可以看到,在线路上,响应消息中的所有XML元素都包含值,因此对象中应包含非空数据.此外,使用旧axis1生成并使用相同数据调用的相同服务的客户端返回非空响应.知道发生了什么事吗?

  7. java – 无法找到JAX-WS的Spring Namespace

    我想将JAX-WS集成到我的Spring项目中.找到此链接:http://jax-ws-commons.java.net/spring/我采用它并将其集成到我的applicationContext.xml:但每次启动Tomcat时,我都会遇到以下异常:SEVERE:Exceptionsendingcontextinitializedeventtolistenerinstanceofclassorg

  8. java – jax-ws将内容类型更改为Content-Type,因为服务器超级敏感

    我必须连接到只能理解Content-Type而不是Content-type的执行不良的服务器.如何让我的JAX-WS客户端发送Content-Type?

  9. java – JAX-WS总是内联发送MTOM附件

    基本上我想创建一个Web服务客户端通过代理方法发送一个mtomsoap消息.我已经从Web服务wsdl创建了我的服务工件.消息已正确创建,但是当我启用mtom并添加附件时,附件始终是内联发送的,而不是单独的mime部分.它像mtom是启用,但由于某种原因它决定不优化消息,所以发送它内联.通过soapui运行相同的代码给出正确的结果,所以我知道服务本身将接受它.这是我创建一个soap请求并发送它的基

  10. java – 使用JAX-WS 2.0和@WebService发布具有一个服务的多个端口

    我想创建一个暴露的多个端口类型的SOAP服务,其中每个端口类型都有一个单独的接口.我正在尝试使用JAX-WS2.0.例:我遇到的问题是@WebService是使用单个类/接口来定义的,所以我能够设置的唯一方法是具有两个单独的服务.每个服务由具有@WebService注释的单独类实现.我想使用相同的服务公开两个端口,以便清楚地表明它们都是同一个API的一部分.这可能吗?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部