问题标签 [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.

0 投票
1 回答
804 浏览

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。

0 投票
1 回答
111 浏览

java - Java:在 XMLStreamReader2 上设置属性?

我正在使用 Woodstox 在我的应用程序中流式传输 XML 文档。我需要在处理它们之前设置模式定义的元素的默认属性,但是使用 Woodstox 执行此操作的唯一方法是使用额外的 XMLStreamReader 将文档读入内存,其中包含一些写入默认属性的逻辑,将其写出来到内存中的 XML 文档,然后将内存中的文档传递给业务逻辑。

我不喜欢这个。我想为每个元素流式传输文档以保持较低的内存占用,因为文档可能很大,并且我在应用程序中运行了多个实例。有没有办法在流式传输文档时将属性注入 XMLStreamReader?我已经找到了一种在流式传输时跳过我不感兴趣的节点的方法:

可以调整此委托以将属性注入 XMLStreamReader 吗?

0 投票
1 回答
1939 浏览

xml - Jackson/Woodstox XML 编码字符解释

我收到了一个 XML 文件,其中包含使用 Jackson 和 Woodstox 读取、编辑和编写它的指令(根据文档中的建议)。在大多数情况下,这并不太难。他们都非常擅长它的作用。但是,在这一点上,我遇到了一个问题:

我的 XML 对象本身确实包含 XML 对象。例如:

当我将 XML 文件读入我的带有 Jackson 注释的 Java 对象时,Woodstox 将和的所有这些实例分别转换为&lt;和。当我将对象作为 XML 文件写回时,变为但保持不变&gt;<><&lt;>>

我试图读取文件的方法的最简单版本如下:

对于我上面给出的示例,我的带有 Jackson 注释的 Java 对象看起来像这样:

最后,我的依赖项如下所示:

这似乎是由于 Jackson 使用了 Woodstox 的 BufferingXmlWriter。这位特定的作者将截取这些字符并对其进行编码,并且似乎没有任何方法可以规避该决定:

所以最后总结一下问题,给了我一个XML文件。该 XML 文件包含属性和元素,这些属性和元素本身包含已编码 (和) 的符号 (<和),以免破坏 XML。当 Woodstox 读取文件时,它不是将 XML 中包含的实际字符串交给我的 Java 对象,而是对字符进行解码。写入后,only被重新编码为. 这似乎正在发生,因为 Jackson 正在使用 Woodstox 的 BufferingXmlWriter,它似乎无法配置以避免对这些字符进行编码。>&lt;&gt;<&lt;

结果,我的问题如下:

我可以将 Jackson 对象配置为使用 Woodstox XML 阅读器,该阅读器允许我在我的 XML 文件中读取和写入字符而无需进一步编码,还是我需要完全满足我的需要寻找不同的解决方案?

0 投票
1 回答
2072 浏览

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?

0 投票
1 回答
1058 浏览

java - JaxB 性能增强

我正在采用的项目是使用 JaxB API 将 XML 解组为 Java 对象。我们将 ByteArrayInputStream 传递给 Unmarshaller,例如:

现在我想找到优化此过程速度的方法,因为字节数组非常小(默认 JaxB 大约需要 1-5 毫秒),但它们有很多。我尝试将不同的输入(如 StAX、StAX-Woodstox 解析器和 StreamSource 对象)传递给 Unmarshaller 以进行比较。

在大约 5000 次尝试中,StAX-Woodstox 解析器的性能优于其他解析器。

以下是我想问的 2 个问题:

  • 鉴于这些信息,您能想出一种更好的方法来优化速度吗?
  • 通过 StAX-Woodstox 解析器速度更快的原因可能是什么?
0 投票
1 回答
1723 浏览

java - 使用woodstox 配置最大属性大小

出于某种奇怪的woodstox-core-asl原因,似乎属性值的最大大小限制为 512KB。所以 XML 解析失败并出现错误(下面的 524288 是 512KB 限制):

有没有办法配置这个最大属性大小甚至完全禁用它?(不过,为什么属性值必须那么大是一个不同的论点——我必须看看我能做些什么。)

我试图查看源代码,但我只能有限地访问它 - 无法在工作中浏览 github。他们的文档中也没有任何指针。

我正在使用的库版本是4.2.0. 升级版本是可能的,但即使使用较新的版本,它们似乎也有这个限制。

0 投票
0 回答
335 浏览

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() 之后的这段代码。

有用。但这似乎不是答案。

.

版本不兼容?

有没有其他可能的方法?

0 投票
2 回答
2584 浏览

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

0 投票
1 回答
258 浏览

java - 有没有办法在woodstox中设置实体扩展限制?

默认情况下,woodstox 库有 100,000 个扩展的限制。有没有办法将其配置为较低级别(比如 1000)?

0 投票
1 回答
212 浏览

java - woodstox 不能离线工作

我正在使用woodstox 来解析一些svg 文件。这仅在我在线时有效。离线它似乎不会使用woodstox,但会退回到默认解析器。在这种情况下,它会慢很多(5 分钟对 15 秒)。对于当前的 SVG,它也会抛出异常。

难道我做错了什么?为什么不离线使用woodstox?

使用的 Maven 依赖项:

解析代码:

这是抛出的异常reader.nextEvent()

这是我的 SVG 之一。是畸形吗?