忽略Apache Axis 1.4中的意外元素的任何解决方法?

在2012年为Apache Axis 2 “Apache AXIS忽略/跳过解析附加元素”之前询问了这个问题。对于Axis 1.4,还没有解决方法吗?

问题定义

例如;

1-在开发[使用Axis 1.4 ]时,我们的wsdl中有一个soap响应定义(’ResponseGetCustomerInfo’):

...           ... 

2-当我们得到这样的结果时,很高兴看到响应是可解析的:

     1 raki    

3-一段时间后,我们的服务提供商更改了服务响应并将新的输出字段添加到响应中, 我们不知道何时或为何 ;

     1 raki Raki Bandao    

4-新的响应理论上与旧版本兼容,因为没有字段既没有删除也没有改变 。 但Axis无法解析响应:

 "SAXException: Invalid Element ... " 

我不想更新wsdl并再次重新生成Web服务客户端 。 那么,有没有办法在响应中跳过“意外的[新添加的]元素”? 或任何解决方法?

我正在尝试很多方法,但还没有找到任何解决方案。

由于糟糕的供应商在编写这些服务,我们总是经历这种地狱。

所以,遗憾的是,没有办法使用WSDL2JAVA的参数,但是有一个解决方法,你将至少重新生成一次存根:

  1. xs:all替换xs:sequence 。 这允许以任何顺序返回元素,并且有助于修复大量的情况,以及生成的存根代码,这使得步骤更容易
  2. 对不起,但是对于每个响应bean,你从生成的代码(例如ResponseGetCustomerInfo.java)进入它的类,而不是这个:
 while(!reader.isStartElement() && !reader.isEndElement()) reader.next(); if(reader.isStartElement()) // A start element we are not expecting indicates a trailing invalid // property throw new org.apache.axis2.databinding.ADBException("Unexpected subelement " + reader.getLocalName()); 

拥有这个:

 while(!reader.isStartElement() && !reader.isEndElement()) reader.next(); // if(reader.isStartElement()) // A start element we are not expecting indicates a trailing invalid // property // The below is commented, to prevent unexpected result parameters from causing an exception // (As well as the condition above is removed) // throw new org.apache.axis2.databinding.ADBException("Unexpected subelement " + reader.getLocalName()); 

它的测试和工作至少比没有解决方案更好。

没有使用过Axis 1.4,但是快速浏览了一下文档。

您可以在代码中添加处理程序。 您甚至可以在不必重新编译的情况下执行此操作,这是一个问题。 Handler包装底层Web服务,在调用服务之前调用它,并在它返回之后调用。 它有点像Servletfilter,但对于Web服务。

处理程序在向前发送以进行处理之前,可以完全访问SOAP主体。 因此,您可以将此作为删除不喜欢的元素的机会。

稍微挖一下,你会发现你最终会得到一个代表你的SOAP主体的DOM元素,所以你可以玩原始的DOM游戏来添加/删除节点等,并在Handler中将其全部设置回来。

您的服务永远不会在编辑SOAP主体中看到新节点。

总而言之,您甚至可以使用Servletfilter完成此操作。

尝试使用Metro库而不是Axis,它在2014年10月对我有用。如果你必须使用Axis库,请忽略这个建议。

使用Axis 2库创建一个调用.NET WCF服务(通过Internet安全通信)的Java客户端,我们从WSDL生成Java客户端类时出错。 作为一种解决方法,我们切换到另一个库Metro 2.3,我们能够生成运行没有任何问题的Java客户端。

从Java获得成功的安全Web服务调用的重要步骤之一是配置客户端和服务器证书。