当 SOAP 正文包含 UTF-8 BOM 时出现 JAX-WS 错误

2023-12-27

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

由于以下原因无法创建 SOAP 消息 异常:XML 读取器错误: 意外的字符内容

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 重新提交请求,则 Web 服务调用将起作用。

为什么 JAX-WS 使用标准 UTF-8 BOM 会崩溃?有解决方法可以解决这个问题吗?任何建议将不胜感激。谢谢

--Vinny


我们在向第 3 方 Java Web 服务编写 .Net 客户端时遇到了类似的问题,.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);

重要的一点是“新的 UTF8Encoding(false);”,该参数是“encoderShouldEmitUTF8Identifier”并且几乎​​解决了问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 SOAP 正文包含 UTF-8 BOM 时出现 JAX-WS 错误 的相关文章

  • Java复式表

    有谁知道可以下载的 Java 中的复式表实现吗 我需要做这样的事情 1 2 3 a x y z b h l m c o a k table get a 1 会回来x 当然 它应该使用任何对象作为键 值等 有两种基本方法 具体取决于您的需求
  • 抽象数据类型和接口

    抽象数据类型和接口有什么区别 例如我们有一个ListADT interface MyListADT
  • 交错立体声 PCM 线性 Int16 大端音频是什么样的?

    我知道网上有很多资源解释如何解交错 PCM 数据 在我当前的项目过程中 我已经研究了其中的大多数 但我没有音频处理的背景 而且我很难找到关于如何处理的详细解释exactly存储这种常见的音频形式 我确实知道我的音频将有两个通道 因此样本将以
  • 您最好的 Swing 设计模式和技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 selenium 和 junit 测试多个浏览器(版本)

    我刚刚发现了硒 一个很棒的工具 我计划运行 使用 selenium ide 生成的 junit4 代码 但我需要它与许多浏览器 网络驱动程序一起运行 这个用例有 junit java 模式吗 我的第一个想法是使用 RunWith Param
  • 克隆在幕后是如何工作的?

    克隆不会调用对象构造函数来创建对象的副本 那么clone使用什么算法呢 我正在寻找本机方法克隆的实现细节 任何指示将不胜感激 请注意 我知道克隆的缺点 protected native Object clone 我不太清楚 我需要查看本机代
  • JDK 11/JavaFX:如何在没有构建/依赖管理的情况下制作胖罐子?

    我认为不用说 我应该能够使用 Oracle 自己的 JDK 和 JavaFX 来自 gluonhq 来构建用户可以使用的可分发 jar 文件 经过详尽的搜索 大量阅读 过去几个月 24 小时或更长时间 最后是这个 Google 搜索查询 h
  • 如何获取网络服务的状态

    如何使用 C 获取 Web 服务的状态 无论是成功完成 失败还是待处理 private void button1 Click object sender EventArgs e var url servicsURL try var myRe
  • Java 中的工作线程

    我需要通过线程每分钟从表中读取数据 然后执行某些操作 任务完成后 我是否应该启动一个线程并将其置于睡眠模式 1 分钟 然后再次检查表是否有数据 再次执行任务并休眠 1 分钟 这是正确的方法吗 任何人都可以为我提供一些 Java 示例代码来执
  • Spring:如何将 KeyHolder 与 PostgreSQL 一起使用

    最近迁移到 POSTGRESQL 我试图获取在数据库表中创建新条目时唯一生成的密钥 桌子screenstable看起来像这样 CREATE TABLE screenstable id serial NOT NULL screenshot b
  • 如何将一个组件放在其他组件之上?

    我有一个JScrollPanel其中包括一个大面板 其本身包括 3 个内面板 我想将一个面板 例如 放在一个特殊的位置 以便始终可以看到 我的意思是用户可以滚动到想要的任何地方 但该面板始终位于其他组件的顶部并且不会移动 我试图通过这样做J
  • Spring Hibernate 4 支持

    我正在使用 Hibernate 4 CR1 我的应用程序之前使用 Spring hibernate 支持 版本 3 我还没有找到任何相关信息 是否有任何迹象表明 Spring 何时 或哪个版本 将提供对 Hibernate 4 的支持 UP
  • Android Widget 实现

    嗨 如果这个问题很愚蠢 我提前道歉 我对 Android 编程相当陌生 而且学得很快 我刚刚创建了一个任务提醒应用程序 并且想将该应用程序转换 实现为一个可以在主屏幕上查看的小部件 有什么方法吗 这可能吗 Thanks 如果没有更多关于您的
  • Spring MVC @RequestBody 不适用于 jquery ajax?

    这是我的ajax请求 var dataModel name1 value1 name2 value2 ajax url testURL type POST async false contentType application json d
  • Java 中使用 PBKDF2 进行密码验证

    我正在用 Java 进行基于密码的文件加密 我使用 AES 作为底层加密算法PBKDF2WithHmacSHA1使用以下代码从盐和密码组合中派生密钥 我从本网站上的另一位慷慨的海报获得 SecretKeyFactory f SecretKe
  • JarSplice 的命令行参数?

    罐子接头 http ninjacave com jarsplice允许将 jar 文件以及其他依赖项和库聚合到一个可执行 jar 文件中 但是 我的可执行 jar 需要两个命令行参数 当我调用 JarSplice jar 时 这两个参数似乎
  • 将 JVM 参数放入要在运行时获取的文件中

    我正在构建当前应用程序的 jar 它需要设置几个 JVM 参数 有没有办法在文件中而不是在命令行上设置这些 JVM 参数 我已经做了一些搜索 看起来我可以使用 java properties 文件做一些事情 可能通过设置 java args
  • JShell 如何查找变量或结果的类型

    如何在 JShell 中查找变量或表达式结果的类型 正在尝试 Java 中的按位运算符 jshell gt byte b 5 lt lt 1 Error incompatible types possible lossy conversio
  • 如何在mockito中模拟Spring依赖

    我正在尝试嘲笑 Spring Beans 我能够模拟对象 B 和 C 但无法模拟 B 类内的对象 插入类 A 中的模拟包含 B 但 X 和 Y 为空 即使我嘲笑了它们 Mockito 有没有办法模拟 Spring bean 中成员的对象 N
  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用

随机推荐

  • @将较少文件导入到有限范围内

    我想从另一个 less 文件导入所有样式 但范围有限 我正在尝试这个 我的网站 less wrapper class import path to styles less 但这根本不起作用 我使用基于浏览器的 less js 选项 并且可以
  • php 全局修剪 $_post

    你能修剪所有 POST 变量吗 因为我现在有一个很长的清单来修剪每个变量 看起来很不专业 我认为修剪 POST 也许会起作用 但没有 你可以这样做array map http php net array map POST array map
  • 如何修复 Android Studio 中的 VectorDrawableCompat 配置错误?

    我在 Android studio 中创建了一个项目 即使不修改项目中的任何单个字符 我也无法运行它 它给出以下错误 java lang RuntimeException 无法启动活动 组件信息 com kk myapplication c
  • 交集完成后,数组中的顺序是否保留?

    当我对两个数组进行交集时 是否可以保证结果顺序基于第一个数组的顺序 例如 如果我有 a 1 2 3 b 3 2 1 could a b return 3 2 1 代替 1 2 3 这是我所期望的 我在 RDoc 或 Pickaxe 的 Ar
  • 如何以编程方式调用 maven-resources-plugin

    我正在编写一个自定义 Maven 插件 该插件的部分工作是过滤复制一些资源 我写的代码如下所示 CopyResourcesMojo rm new CopyResourcesMojo rm setOutputDirectory outputD
  • 如何查找 Linux 上 Java Desktop API 需要哪些库?

    我正在尝试找到一种方法来确定 Java 需要哪些库才能使 Desktop API 工作 特别是BROWSE功能 我读了一些指南 错误报告和解决方法 但它们都不起作用 我可以通过安装使其在 Debian 上运行libgnome2 0 and
  • 将 C++ LPCWSTR 打印到文件

    我正在尝试将 LPCWSTR 值打印到文件中 但它只打印地址 而不打印值 我尝试过取消引用变量 使用 来获取 value 但这也不起作用 如何打印该值 void dump LPCWSTR text ofstream myfile C myf
  • 用于自定义图例的 Angular ngx-charts 选项?

    我目前正在使用 Angular2 的 ngx charts 我想自定义一些图例 例如将图例放在图表下方 或重命名图例字段 或使图例更宽 部分文本被截断 等 有什么好的选项来自定义图例吗 或者这通常是不可能的 或者最好的方法是什么 目前 我的
  • 添加 FFmpegMediaMetadataRetriever 后 Apk 大小增加

    我将依赖项 com github wseemann FFmpegMediaMetadataRetriever 1 0 3 添加到我的Android Studio中的应用程序 build gradle 中 apk从2 MB跳到16 MB 我只
  • 嘿,如何从 laravel 中的 klaviyo php-sdk 收集 laravel 中的短信同意

    嘿伙计们 有谁知道如何在 klaviyo 中添加短信内容吗 laravel 中的这个包 https github com klaviyo php klaviyo or just add a property to someone 基本上 我
  • 什么时候应该在 Material-UI 中使用 Typography?

    我正在使用 Material UI 但我有点困惑 有这个组件Typography https material ui com components typography typography但我真的不明白何时使用它以及它的目的是什么 什么时
  • 禁用 ScrollView 中包含的 ListView 的滚动

    我想为我的用户显示个人资料屏幕 它必须具有三个视图 2Buttons and a ImageView and a ListView显示该用户制作的内容 但是 我不想要ListView滚动 相反 我希望它尽可能大 并将我所有的观点放在一个Sc
  • 大写 utf8 字符与其小写变体的字节数始终相同吗?

    显然对于拉丁字母来说也是如此 但我是从概念意义上跨语言和 Unicode 规范来问这个问题的 实际上 这是为了比较两个字符串而出现的 如果您已经知道它们在所有语言中的字节数不同 您是否可以认为足以保证它们不是同一字符串的不同 大小写 版本
  • Android IME,在EditText中设置光标位置

    我正在使用软键盘 需要在 IME 编辑文本中设置光标位置 如上图所示 我创建了软键盘 我们可以看到在编辑文本和当前光标位置 由蓝色指示器显示 中输入了一些文本 我需要将光标位置设置在当前行的末尾 在我们的例子中 在图像中首先以红色显示的行的
  • 如何在 Ruby 应用程序中找到未使用的方法?

    我有一个 Ruby 应用程序 其中有很多类 模块 其中一些未使用 有没有一种简单的方法可以找出哪个 我正在考虑做一个配置文件 然后使用它的输出 还有其他想法吗 像 rcov 这样的覆盖工具可能会有所帮助 https github com r
  • 如何在二维图像中的不规则形状上应用纹理?

    我正在尝试从 UIColor 图案图像在 CALayer 上应用纹理 纹理正在应用 但未正确透视转换 看起来我的绘图逻辑存在问题 即我需要使用纹理图像并将其映射到不规则形状 我做了一些研究 发现这件事可以通过 OpenGL 或 Metal
  • TypeORM 选择不区分大小写的不同

    我正在尝试创建一个连接到 postgresql 数据库的 TypeORM 查询生成器以获取数据库中的所有唯一名称 我的查询看起来像这样 names await this context manager getRepository Names
  • 如何在text2vec中对齐两个GloVe模型?

    假设我已经训练了两个独立的 GloVe 向量空间模型 使用text2vec in R 基于两个不同的语料库 这样做可能有不同的原因 例如 两个基础语料库可能来自两个不同的时间段 或者两个非常不同的流派 我有兴趣比较这两个语料库之间单词的用法
  • 删除名称与模式匹配的多个数据库

    我想删除所有以单词开头的数据库 abc xyz cms db1 cms db2 cms xyz pqr 在上面给出的示例中 我想删除所有以 cms 一词开头的数据库 我想 maatkit 或 shell 脚本可以做到这一点 最好的方法是什么
  • 当 SOAP 正文包含 UTF-8 BOM 时出现 JAX-WS 错误

    我使用部署在 WebLogic 10 3 上的 JAX WS v2 1 3 Sun JDK 1 6 0 05 开发了一个 Web 服务 当我使用 Java 客户端或 SoapUI 或其他 Web 服务测试工具时 该服务运行良好 我需要使用