(Axis + Jetty)前缀自动生成的前缀命名空间

时间:2012-08-17 13:29:11

标签: java namespaces jetty axis2

我需要得到一个旧软件(我没有开发)来测试旧设备。设备通过webservices与服务器“对话”。这些Web服务是由轴自动生成的(Axis接受一个类并从它的方法中创建web服务)。

问题是:开发设备是为了读取这样的xml:

<ns:getReferenceCurveResponse xmlns:ns="http://services.teste.org" xmlns:ax22="http://data.teste.org/xsd" xmlns:ax23="http://util.java/xsd">  
<ns:return type="org.teste.ReferenceCurve">  
<ax21:createdOn>2012-08-16 17:00:59.0</ax21:createdOn>  
<ax21:endPoint>9.2</ax21:endPoint>  
<ax21:fiberId>21</ax21:fiberId>  
<ax21:id>42</ax21:id>  

现在网络服务就像这样:

<ns:getReferenceCurveResponse xmlns:ns="http://services.teste.org" xmlns:ax22="http://data.teste.org/xsd" xmlns:ax23="http://util.java/xsd">  
<ns:return type="org.teste.ReferenceCurve">  
<ax22:createdOn>2012-08-16 17:00:59.0</ax22:createdOn>  
<ax22:endPoint>9.2</ax22:endPoint>  
<ax22:fiberId>21</ax22:fiberId>  
<ax22:id>42</ax22:id>  

正如您所注意到,名称空间中的前缀已从ax21更改为ax22,因为设备已编码为前缀ax21,因此生成错误。

我已经挖了一个解决方案,却找不到。我重新编译了服务器端,也没有成功。我无法找到任何地方更改此命名空间前缀,因为它是由Axis2

自动生成的

2 个答案:

答案 0 :(得分:1)

好吧,它已经徘徊了一天,所以我会用绝对错误的方式来处理这个码头,因为码头是这里的标签之一

您可以使用servlet过滤器并动态调整响应以修复该命名空间问题....但这将是糟糕的坏事:))

祝你好运!

答案 1 :(得分:0)

我找不到任何解决方法。

由于它是用于本地测试(服务器端,在客户端启动并运行),并且由于此更改仅影响服务器端,因此我设法将命名空间前缀'ax22'更改为'ns'

您可以通过将此标记添加到services.xml来实现:

<schema schemaNamespace="http://your.package.inverted/xsd"/>

就像,如果你有com.google.something包,它应该是这样的:

<schema schemaNamespace="http://something.google.com/xsd"/>