问题标签 [woodstox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何配置 Spring / Woodstox jaxws 以从代理 SOAP 服务响应中去除 CTRL-CHAR
我一直在寻找一种解决方案,以在代理服务遇到 Woodstox 的 DeserializationException 之前更改/去除 SOAP 响应。下面是我得到的例外。在给出像 CTRL-CHAR 对 XML 无效的直截了当的答案之前,创建一个自定义 SOAP 消息处理程序一些事实:
这是一个 java 桌面应用程序,所以没有 Tomcat
通过 JAX-WS RI 2.2.8 生成 wsdl 和存根
Web 服务客户端配置如下:
/li>
我尝试了以下配置,但没有成功:
我还尝试创建自定义 SOAPHandler 和 LogicalHandler,但它们也没有帮助。
我知道有一些方法可以从响应正文中搜索和替换 unicode 字符并在处理响应正文后使用它,但我正在寻找的是一个过滤器,就像上面的 WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER 配置一样,它不起作用: (因此,在不中断请求和对此代理服务的响应的情况下,我只需要自定义 Woodstox 或 Spring 或任何我可以注入的东西,以在引发错误和中断通信之前从响应中过滤无效字符。
org.springframework.remoting.RemoteAccessException:无法在 [null] 访问远程服务;嵌套异常是 com.sun.xml.ws.encoding.soap.DeserializationException:无法读取响应:javax.xml.bind.UnmarshalException - 带有链接异常:[com.ctc.wstx.exc.WstxUnexpectedCharException:非法字符(( CTRL-CHAR,代码 31)) 在 [row,col {unknown-source}]: [91,222]] 在 org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:565) 在 org.springframework.remoting。 jaxws.JaxWsPortClientInterceptor.invoke(JaxWsPortClientInterceptor.java:541) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)在com.sun。
java - Java:在 XMLStreamReader2 上设置属性?
我正在使用 Woodstox 在我的应用程序中流式传输 XML 文档。我需要在处理它们之前设置模式定义的元素的默认属性,但是使用 Woodstox 执行此操作的唯一方法是使用额外的 XMLStreamReader 将文档读入内存,其中包含一些写入默认属性的逻辑,将其写出来到内存中的 XML 文档,然后将内存中的文档传递给业务逻辑。
我不喜欢这个。我想为每个元素流式传输文档以保持较低的内存占用,因为文档可能很大,并且我在应用程序中运行了多个实例。有没有办法在流式传输文档时将属性注入 XMLStreamReader?我已经找到了一种在流式传输时跳过我不感兴趣的节点的方法:
可以调整此委托以将属性注入 XMLStreamReader 吗?
xml - Jackson/Woodstox XML 编码字符解释
我收到了一个 XML 文件,其中包含使用 Jackson 和 Woodstox 读取、编辑和编写它的指令(根据文档中的建议)。在大多数情况下,这并不太难。他们都非常擅长它的作用。但是,在这一点上,我遇到了一个问题:
我的 XML 对象本身确实包含 XML 对象。例如:
当我将 XML 文件读入我的带有 Jackson 注释的 Java 对象时,Woodstox 将和的所有这些实例分别转换为<
和。当我将对象作为 XML 文件写回时,变为但保持不变>
<
>
<
<
>
>
我试图读取文件的方法的最简单版本如下:
对于我上面给出的示例,我的带有 Jackson 注释的 Java 对象看起来像这样:
最后,我的依赖项如下所示:
这似乎是由于 Jackson 使用了 Woodstox 的 BufferingXmlWriter。这位特定的作者将截取这些字符并对其进行编码,并且似乎没有任何方法可以规避该决定:
所以最后总结一下问题,给了我一个XML文件。该 XML 文件包含属性和元素,这些属性和元素本身包含已编码 (和) 的符号 (<
和),以免破坏 XML。当 Woodstox 读取文件时,它不是将 XML 中包含的实际字符串交给我的 Java 对象,而是对字符进行解码。写入后,only被重新编码为. 这似乎正在发生,因为 Jackson 正在使用 Woodstox 的 BufferingXmlWriter,它似乎无法配置以避免对这些字符进行编码。>
<
>
<
<
结果,我的问题如下:
我可以将 Jackson 对象配置为使用 Woodstox XML 阅读器,该阅读器允许我在我的 XML 文件中读取和写入字符而无需进一步编码,还是我需要完全满足我的需要寻找不同的解决方案?
java - 如何将 XML(字符串)附加到已经创建文档开头的 XmlEventWriter(StAX)
为了创建大型 XML 文件,我们决定使用 StAX API。基本结构是使用低级 api 构建的:createStartDocument()、createStartElement()。这按预期工作。
但是,在某些情况下,我们喜欢附加现有的 XML 数据,这些数据驻留在字符串(从数据库中检索)中。以下片段说明了这一点:
使用上面的代码,根据实现,我们没有得到预期的结果:
- Woodstox:抛出以下异常:'Can not output XML declaration, after output has been done'。似乎 XMLEventReader 以 startDocument 事件开始,但由于 startDocument 事件已经以编程方式触发,因此会引发错误。
- JDK:它附加
<?xml version="1.0" ... <fragments><fragment>...
了 -> 这会导致无效的 XML。
我还尝试使用以下方法附加 XML:
这里的问题是,即使附加了 XML,< 和 > 也会转换为 < 和 >。因此,这会导致无效的 XML。
我是否缺少允许我简单地将字符串附加为 XML 的 API?
java - JaxB 性能增强
我正在采用的项目是使用 JaxB API 将 XML 解组为 Java 对象。我们将 ByteArrayInputStream 传递给 Unmarshaller,例如:
现在我想找到优化此过程速度的方法,因为字节数组非常小(默认 JaxB 大约需要 1-5 毫秒),但它们有很多。我尝试将不同的输入(如 StAX、StAX-Woodstox 解析器和 StreamSource 对象)传递给 Unmarshaller 以进行比较。
在大约 5000 次尝试中,StAX-Woodstox 解析器的性能优于其他解析器。
以下是我想问的 2 个问题:
- 鉴于这些信息,您能想出一种更好的方法来优化速度吗?
- 通过 StAX-Woodstox 解析器速度更快的原因可能是什么?
java - 使用woodstox 配置最大属性大小
出于某种奇怪的woodstox-core-asl
原因,似乎属性值的最大大小限制为 512KB。所以 XML 解析失败并出现错误(下面的 524288 是 512KB 限制):
有没有办法配置这个最大属性大小甚至完全禁用它?(不过,为什么属性值必须那么大是一个不同的论点——我必须看看我能做些什么。)
我试图查看源代码,但我只能有限地访问它 - 无法在工作中浏览 github。他们的文档中也没有任何指针。
我正在使用的库版本是4.2.0
. 升级版本是可能的,但即使使用较新的版本,它们似乎也有这个限制。
java - 无法使用 xstream、stax2、woodstox 获得 cdata 结果
示例 xml
我正在使用 xstream(1.4.7)、stax2-api(3.1.4)、woodstox(5.0.3)。
这是我的示例测试代码
我无法在路径“root/first/second”中获取 cdata 字符串结果
我认为 XMLInputFactory.newInstance() 返回类对结果的影响。
当我添加
获取 XMLInputFactory.newInstance() 之后的这段代码。
有用。但这似乎不是答案。
.
版本不兼容?
有没有其他可能的方法?
java - CXF 3.1.12 无法创建安全的 XMLInputFactory
使用 SoapUI 发送请求时出现“无法创建安全的 XMLInputFactory”错误,我尝试了一些 stackoverflow 提到的解决方案,例如添加 woodstox 和 stax2-api,但问题仍然存在
来自 build.gradle:
它以前与woodstox-core一起工作,但开始抛出错误
从版本 3 CXF 的先前解决方案中,甚至不需要woodstox,我也尝试过不使用woodstox。
是否可以像axis2一样更新任何其他依赖项?我的下一步应该是什么?谢谢
注意:使用tomcat 8.5.19
java - 有没有办法在woodstox中设置实体扩展限制?
默认情况下,woodstox 库有 100,000 个扩展的限制。有没有办法将其配置为较低级别(比如 1000)?
java - woodstox 不能离线工作
我正在使用woodstox 来解析一些svg 文件。这仅在我在线时有效。离线它似乎不会使用woodstox,但会退回到默认解析器。在这种情况下,它会慢很多(5 分钟对 15 秒)。对于当前的 SVG,它也会抛出异常。
难道我做错了什么?为什么不离线使用woodstox?
使用的 Maven 依赖项:
解析代码:
这是抛出的异常reader.nextEvent()
:
这是我的 SVG 之一。是畸形吗?