本帖中的代码我举个栗子,不代表真实情境。
之前用WSDL2Java生成的代码与WSDL的参数顺序是对应的,可以正常调用。
请求报文类似于:...
<fruits>
  <pear>10</pear>
  <banana>20</banana>
  <apple>60</apple>
</fruits>
...这种报文发送到目前手中的项目对接的ESB中是可以运行的。后来,为了精简和高效化代码,我们使用了RPC方式重构了代码,如:
Java对象结构如下public class Frutes
{
  private int pear;
  private int banana;
  private int apple;  public int setPear(int pear){this.pear=pear;}
  public int getPear(){return this.pear;}
  ...
}抓包后发现此对象被转换成了形如下面的报文...
<fruits>
  <apple>60</apple>
  <banana>20</banana>
  <pear>10</pear>
</fruits>
...
注意!RPC方式转换后报文中,参数的顺序是按照参数名排序的,而之前的报文是根据WSDL定义排序的。顺序不对应通常来讲似乎不算问题,但是奇葩就奇葩在,ESB接口的逻辑要求必须按照WSDL的顺序发送请求,否则会返回逻辑错误。
至于ESB那边怎么处理我这里是没法管的,求高手给出靠谱的解决参数顺序问题的方法。JavaWSDLESBWebServiceAxis2