gpt4 book ai didi

java - 如何让 JAXWS 在 SOAP 响应上发送内容长度 header

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:03 25 4
gpt4 key购买 nike

基本上我使用 JAXWS 创建了一个 Web 服务。它使用 SOAP 并有效。然而,在某些请求中,一些客户端崩溃/错误,这似乎与 JAXWS web 服务不发送内容长度 header 这一事实有关。有办法添加吗?

使用:openjdk-6 (6b20)

我的类(class)是这样的:

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.Endpoint;

@WebService
public class SOAP {
public static void main(String[] args) {
try {
SOAP server = new SOAP();
Endpoint endpoint = Endpoint.publish('localhost:1234', server);
} catch (Exception e) {
Utils.getLog("SOAP").fatal("General Error", e);
}
}
}

使用 tcpdump 确认响应中没有内容长度:

0x0000:  4500 00b0 4da5 4000 4006 20d5 5cf3 1021  E...M.@.@...\..!
0x0010: 5cf3 01c7 13b2 bcea a9be 716e 14c3 16a1 \.........qn....
0x0020: 8018 006c cc70 0000 0101 080a 2e1b 3ccc ...l.p........<.
0x0030: 2e18 23a2 4854 5450 2f31 2e31 2032 3030 ..#.HTTP/1.1.200
0x0040: 204f 4b0d 0a54 7261 6e73 6665 722d 656e .OK..Transfer-en
0x0050: 636f 6469 6e67 3a20 6368 756e 6b65 640d coding:.chunked.
0x0060: 0a43 6f6e 7465 6e74 2d74 7970 653a 2074 .Content-type:.t
0x0070: 6578 742f 786d 6c3b 6368 6172 7365 743d ext/xml;charset=
0x0080: 2275 7466 2d38 220d 0a44 6174 653a 2053 "utf-8"..Date:.S
0x0090: 6174 2c20 3137 2053 6570 2032 3031 3120 at,.17.Sep.2011.
0x00a0: 3134 3a31 393a 3337 2047 4d54 0d0a 0d0a 14:19:37.GMT....

所以我的问题是,有没有办法告诉网络服务发送内容长度和回复?或者在发送回复之前附加它的方法?

最佳答案

您可以通过编写处理程序将 HTTP header 添加到传出响应。您的处理程序将扩展标准 JAX-WS handler并使用 MessageContext在 handleMessage(C context) 方法中修改 HTTP_RESPONSE_HEADER 属性(实际上是映射中的一个键)。因此,例如您的处理程序将是:

public class MyHandler<SOAPMessageContext> implements Handler {

public boolean handleMessage(SOAPMessageContext c) {
if((Boolean)c.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
c.put(SOAPMessageContext.HTTP_RESPONSE_HEADERS,"your header stuff here");
return true;
}
}
}

您将需要创建一个处理程序链文件,并在您的端点类中添加一个指向该文件的注释。注解为@HandlerChain(file="...");

完成此操作后,您应该能够修改传入和传出的 HTTP header 。 HTH.

关于java - 如何让 JAXWS 在 SOAP 响应上发送内容长度 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com