pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

jax-ws 將 Content-type 更改為 Content-Type 因?yàn)榉?wù)器是

jax-ws change Content-type to Content-Type because server is hyper sensitive(jax-ws 將 Content-type 更改為 Content-Type 因?yàn)榉?wù)器是超敏感的)
本文介紹了jax-ws 將 Content-type 更改為 Content-Type 因?yàn)榉?wù)器是超敏感的的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

限時(shí)送ChatGPT賬號(hào)..

我必須連接到一個(gè)執(zhí)行不佳的服務(wù)器,該服務(wù)器只能理解 Content-Type (capital-T) 而不是 Content-type.如何讓我的 JAX-WS 客戶端發(fā)送 Content-Type?

我試過(guò)了:

地圖<字符串,列表<字符串>>標(biāo)頭=(地圖<字符串,列表<字符串>>)((BindingProvider)port).getRequestContext().get(MessageContext.HTTP_REQUEST_HEADERS);

但是 headersnull.我做錯(cuò)了什么?

解決方案

我必須連接到一個(gè)執(zhí)行不佳的服務(wù)器,該服務(wù)器只理解 Content-Type(capital-T) 而不是 Content-type.如何讓我的 jax-ws 客戶端發(fā)送 Content-Type?

我對(duì)這個(gè)問(wèn)題進(jìn)行了更多研究,但遺憾的是,恐怕答案是:你不能.讓我分享一下我的發(fā)現(xiàn).

首先,您將在 https://jax- 中找到代碼ws.dev.java.net/guide/HTTP_headers.html 允許您訪問(wèn)未來(lái) HTTP 請(qǐng)求的 HTTP 標(biāo)頭(此時(shí)尚未創(chuàng)建),它允許您設(shè)置用于發(fā)出請(qǐng)求的附加 HTTP 標(biāo)頭(稍后將添加到 HTTP 請(qǐng)求中).

所以,如果你之前沒(méi)有 put 任何東西,不要期望下面的代碼不會(huì)返回 null (實(shí)際上,你只會(huì)得到你 <代碼>把放在那里):

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

然后,我根據(jù)同一個(gè)鏈接中提供的代碼做了一個(gè)小測(cè)試:

AddNumbersImplService 服務(wù) = new AddNumbersImplService();AddNumbersImpl 端口 = service.getAddNumbersImplPort();((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,Collections.singletonMap("X-Client-Version",Collections.singletonList("1.0-RC")));port.addNumbers(3, 5);

這就是我在運(yùn)行客戶端代碼時(shí)在 HTTP 請(qǐng)求中看到的內(nèi)容:

<上一頁(yè)>發(fā)布/q2372336/addnumbers HTTP/1.1內(nèi)容類型:text/xml;charset="utf-8"X 客戶端版本:1.0-RC皂化:"接受:text/xml、multipart/related、text/html、image/gif、image/jpeg、*;q=.2, */*;q=.2用戶代理:JDK 6 中的 JAX-WS RI 2.1.6主機(jī):本地主機(jī):8080連接:保持活動(dòng)內(nèi)容長(zhǎng)度:249

你注意到區(qū)別了嗎:只有 X-Client-Version 標(biāo)頭的第一個(gè)字符保持大寫(xiě),其余的被降低!

確實(shí),如果您檢查類 csxwtHeaders 用于表示HTTP請(qǐng)求(和響應(yīng))標(biāo)頭,您會(huì)看到它在添加鍵時(shí)規(guī)范化"鍵(在 normalize(String) 中):

/* 通過(guò)轉(zhuǎn)換為以下形式來(lái)規(guī)范化密鑰.* 第一個(gè)字符大寫(xiě),其余小寫(xiě).* key 假定為 ASCII*/私有字符串規(guī)范化(字符串鍵){...}

所以,雖然 csxwthcHttpTransportPipe 類(我的理解是這里是創(chuàng)建HTTP請(qǐng)求的地方,這也是之前添加的地方標(biāo)頭將添加到 HTTP 請(qǐng)求標(biāo)頭中)實(shí)際上添加 "Content-Type" 作為 csxwtHeaders 實(shí)例,因?yàn)榍懊嫣岬降膶?shí)現(xiàn)細(xì)節(jié),key 會(huì)被修改.

我可能是錯(cuò)的,但我不明白如何在不修補(bǔ)代碼的情況下更改它.奇怪的是,我不認(rèn)為這種規(guī)范化"的東西真的符合 RFC(盡管沒(méi)有檢查 RFC 關(guān)于標(biāo)頭大小寫(xiě)的內(nèi)容).我很驚訝.實(shí)際上,您應(yīng)該提出問(wèn)題.

所以我在這里看到了三個(gè)選項(xiàng)(因?yàn)榈却迯?fù)可能不是一個(gè)選項(xiàng)):

  • 自己修補(bǔ)代碼并重建 JAX-WS RI(具有這種方法的所有缺點(diǎn)).
  • 為您的客戶嘗試另一種 JAX-WS 實(shí)現(xiàn),例如 CFX.
  • 讓請(qǐng)求通過(guò)某種自定義代理來(lái)動(dòng)態(tài)修改標(biāo)頭.

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?

I've tried:

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

But headers is null. What am I doing wrong?

解決方案

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?

I've dug this question a bit more and, sadly, I'm afraid the answer is: you can't. Let me share my findings.

First, the code that you'll find in https://jax-ws.dev.java.net/guide/HTTP_headers.html does not give you access to the HTTP headers of the future HTTP request (that hasn't been created at this point), it allows you to set additional HTTP headers for making a request (that will be added to the HTTP request later).

So, don't expect the following code to not return null if you don't put anything before (and actually, you'll only get what you put in there):

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

Then, I did a little test based on the code provided in the same link:

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);

And this is what I see in the HTTP request when running the client code:

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

Do you notice the difference: only the first char of the X-Client-Version header is kept upper cased, the rest is lowered!

And indeed, if you check the class c.s.x.w.t.Headers that is used to represent HTTP request (and response) headers, you'll see that it "normalizes" keys when they are added (in 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) {
     ...
 }

So, while the c.s.x.w.t.h.c.HttpTransportPipe class (my understanding is that this is where the HTTP request is created, this is also where previously added headers will be added to the HTTP request headers) actually adds "Content-Type" as key in a c.s.x.w.t.Headers instance, the key will be modified because of the previously mentioned implementation detail.

I may be wrong but I don't see how this could be changed without patching the code. And the odd part is that I don't think that this "normalizing" stuff is really RFCs compliant (didn't check what RFCs say about headers case though). I'm surprised. Actually, you should raise an issue.

So I see three options here (since waiting for a fix might not be an option):

  • Patch the code yourself and rebuild JAX-WS RI (with all the drawbacks of this approach).
  • Try another JAX-WS implementation like CFX for your client.
  • Let the request go through some kind of custom proxy to modify the header on the fly.

這篇關(guān)于jax-ws 將 Content-type 更改為 Content-Type 因?yàn)榉?wù)器是超敏感的的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Parsing an ISO 8601 string local date-time as if in UTC(解析 ISO 8601 字符串本地日期時(shí)間,就像在 UTC 中一樣)
How to convert Gregorian string to Gregorian Calendar?(如何將公歷字符串轉(zhuǎn)換為公歷?)
Java: What/where are the maximum and minimum values of a GregorianCalendar?(Java:GregorianCalendar 的最大值和最小值是什么/在哪里?)
Calendar to Date conversion for dates before 15 Oct 1582. Gregorian to Julian calendar switch(1582 年 10 月 15 日之前日期的日歷到日期轉(zhuǎn)換.公歷到儒略歷切換)
java Calendar setFirstDayOfWeek not working(java日歷setFirstDayOfWeek不起作用)
Java: getting current Day of the Week value(Java:獲取當(dāng)前星期幾的值)
主站蜘蛛池模板: 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 污水提升器,污水提升泵,污水提升装置-德国泽德(zehnder)水泵系统有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 神马影院-实时更新秒播 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 砂尘试验箱_淋雨试验房_冰水冲击试验箱_IPX9K淋雨试验箱_广州岳信试验设备有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 智慧养老_居家养老_社区养老_杰佳通 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 上海租车公司_上海包车_奔驰租赁_上海商务租车_上海谐焕租车 | 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 开云(中国)Kaiyun·官方网站-登录入口 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 识禅_对禅的了解,从这里开始 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 空压机商城|空气压缩机|空压机配件-压缩机网旗下商城 | 南京和瑞包装有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 潍坊大集网-潍坊信息港-潍坊信息网 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 |