gpt4 book ai didi

java - 当 SOAP 主体包含 UTF-8 BOM 时出现 JAX-WS 错误

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

我使用部署在 WebLogic 10.3 上的 JAX-WS (v2.1.3 - Sun JDK 1.6.0_05) 开发了一个 Web 服务,当我使用 Java 客户端或 SoapUI 或其他 Web 服务测试工具时,它工作得很好。我需要使用 2005 Microsoft SQL Server Reporting Services 使用此服务,但出现以下错误

Couldn't create SOAP message due to exception: XML reader error: unexpected character content

SEVERE: Couldn't create SOAP message due to exception: XML reader error: unexpected character content: "?"
com.sun.xml.ws.protocol.soap.MessageCreationException: Couldn't create SOAP message due to exception: XML reader error: unexpected character content: "?"
at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:292)
at com.sun.xml.ws.transport.http.HttpAdapter.decodePacket(HttpAdapter.java:276)
at com.sun.xml.ws.transport.http.HttpAdapter.access$500(HttpAdapter.java:93)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:432)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:134)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:129)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:160)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: com.sun.xml.ws.streaming.XMLStreamReaderException: XML reader error: unexpected character content: "?"
at com.sun.xml.ws.streaming.XMLStreamReaderUtil.nextElementContent(XMLStreamReaderUtil.java:102)
at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:174)
at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:296)
at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:128)
at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:287)
... 22 more

如果我使用 HTTP 代理来嗅探 SSRS 发送给 JAX-WS 的内容,我会看到 EF BB BF 作为帖子正文的开头,而 JAX-WS 不喜欢这样。如果我删除特殊字符并使用 Fiddler 重新提交请求,则网络服务调用有效。

为什么 JAX-WS 使用标准 UTF-8 BOM 会崩溃?是否有解决此问题的解决方法?任何建议将不胜感激。谢谢

--文尼

最佳答案

我们在将 .Net 客户端写入第 3 方 Java 网络服务时遇到了类似的问题,.Net 包含字节顺序标记,Java 服务会抛出异常。

第 3 方 SOAP 方法采用单个字符串作为参数,该字符串是一个 XML 文档(我喜欢那些不真正理解 SOAP 试图解决什么问题的人!)默认情况下,.net 添加了 UTF- 8字节顺序标记到“payload”xml文档,严格来说是正确的,但在实践中会出现问题。

在我们的案例中,我们从客户端 (.net) 端找到了两种可能的解决方案。不过,我不确定通过 SQL 报告服务做到这一点有多容易。

String.Trim() - 在传递到 soap 方法之前必须将 xml 放入字符串中,调用 .Trim() 删除字节顺序标记。很简单。

第二种方法是在 XmlWriterSettings 上设置 UTF 编码设置略有不同,如下所示:

XmlWriter xmlWriter = null;
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = new UTF8Encoding(false);
xmlWriter = XmlWriter.Create(xmlSteam, settings);

重要的一点是“new UTF8Encoding(false);”,这个参数是“encoderShouldEmitUTF8Identifier”,几乎可以解决问题。

关于java - 当 SOAP 主体包含 UTF-8 BOM 时出现 JAX-WS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1639810/

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