Jakarta ee 如何在WebLogic中更改StAX解析器

Jakarta ee 如何在WebLogic中更改StAX解析器,jakarta-ee,weblogic,jax-ws,weblogic-10.x,woodstox,Jakarta Ee,Weblogic,Jax Ws,Weblogic 10.x,Woodstox,我正在开发一个相当复杂的JavaEE应用程序,它部署在WebLogic10.x服务器上。该应用程序的一部分是由JAX-WS生成的SOAP客户端。看起来是这样的: @WebServiceClient(name=“MyService”, targetNamespace=”http://example.com/wsdl/yyy/tcs", wsdlLocation=“file:/path/to/MyService.wsdl”) 公共类MyService扩展服务{ // ... @WebEndpoint

我正在开发一个相当复杂的JavaEE应用程序,它部署在WebLogic10.x服务器上。该应用程序的一部分是由JAX-WS生成的SOAP客户端。看起来是这样的:

@WebServiceClient(name=“MyService”,
targetNamespace=”http://example.com/wsdl/yyy/tcs",
wsdlLocation=“file:/path/to/MyService.wsdl”)
公共类MyService扩展服务{
// ...
@WebEndpoint(name=“TCS\u for\u LTU”)
公共TCSForLTU getTCSForLTU(){
返回super.getPort(新的QName(“http://example.com/wsdl/yyy/tcs“,”TCS_for_LTU“),TCSForLTU.class);
}
@WebEndpoint(name=“TCS\u for\u LTU”)
公共TCSForLTU getTCSForLTU(WebServiceFeature…功能){
返回super.getPort(新的QName(“http://example.com/wsdl/yyy/tcs“,“TCS\U代表LTU”)、TCSForLTU.class、features);
}
// ...
}
我遇到的问题是,每当我尝试向SOAP服务器发送请求时,在解析响应时都会出现以下异常:

XML reader error: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ':' (code 58) expected '='
at [row,col {unknown-source}]: [1,270] 10/23/13 2:48 PM
通过谷歌搜索,我发现这是Woodstox StAX解析器的。它显然在解析SOAP响应的根元素时遇到问题,如下所示:


Woodstox抛出了一个错误,因为命名空间如下:
xmlns:nsc:RFIDCommandEnum
。SOAP服务器是由第三方提供的,我不能改变这一点。为什么Woodstox会被使用?我没有在任何地方配置它。我用参数启动服务器

-Djavax.xml.stream.XMLInputFactory=weblogic.xml.stax.XMLStreamInputFactory
…但它仍然使用Woodstox。我甚至不知道这是从哪里来的;我搜索了我所有的部署,但在任何地方都没有找到它。此外,这是已知的Woodstox虫子吗?我没有找到任何关于它的信息


我能找出Woodstox实现的来源吗?这样我就可以扔掉它了?这能解决我的问题吗?

在您的weblogic-application.xml中,您是否告诉它更喜欢使用woodstox,比如
com.ctc.wstx.*
不。我为
com.ctc.wstx
做了grep,但在我的整个源代码存储库中,却没有提到它。soap信封中有这样的内容,真是令人遗憾。根据W3C标准,这甚至是无效的,因此抛出错误也就不足为奇了。你在用Axis吗?您是否也尝试过设置
XMLOutputFactory
XMLEventFactory
?即使您让它停止使用Woodstox,Weblogic stax类也可能会抛出一个错误,因为xml格式不正确,您没有意识到它不是有效的xml。是的,我在应用程序的其他部分使用Axis 2。明天我将试着设置其他属性。问题是,我知道Weblogic解析器会接受它,因为这已经在使用JAX-RPC而不是使用Weblogic解析器的JAX-WS的应用程序的较旧迭代中起作用了。(我认为XML是有效的原因…)我发现Weblogic的实现实际上是Woodstox,至少部分是这样。这就是我得到Woodstox例外的原因。看起来当我们使用JAX-RPC时,我们使用了Sun的解析器(我不知道),但我们放弃了它,因为应用程序的其他部分不能很好地使用它。所以这个问题可能没有答案,我必须想一些解决办法。