具体的错误信息如下:
org.apache.axis2.AxisFault: A required header representing a Message Addressing Property is not present错误产生的场景:
我用同一WSDL文件生成的服务端和客户端,用客户端调服务端时报的错,DEBUG跟进去调试,发现参数都有,只是在向服务端发请求的那个方法那出的错,方法如下:(具体出错的地方我标记成红色了)
package com.chinamobile.www.vgop.serviceorder.v1_0;
import java.rmi.RemoteException;import org.apache.axis2.AxisFault;
import org.apache.axis2.transport.http.HTTPConstants;
import com.chinamobile.www.vgop.serviceorder.v1_0_sub.OrderServiceStub;
import com.chinamobile.www.vgop.serviceorder.v1_0_sub.OrderServiceStub.SyncOrderRelationCfmResponse;public class TaskObject implements Runnable
{
    
    private MsgHeaderClient msgHeaderClient = null;
    
    public MsgHeaderClient getMsgHeaderClient()
    {
        return msgHeaderClient;
    }
    
    public void setMsgHeaderClient(MsgHeaderClient msgHeaderClient)
    {
        this.msgHeaderClient = msgHeaderClient;
    }
    
    public void run()
    {
        try
        {
            //睡眠1s,防止任务添加进来就执行,导致服务端还没有响应的时候就任务就已经执行了。
            Thread.sleep(1000L);
        }
        catch (InterruptedException e2)
        {
            e2.printStackTrace();
        }
        OrderServiceStub stub = null;
        try
        {
            stub = new OrderServiceStub("http://10.40.55.23:8080/bmp/services/OrderService");
        }
        catch (AxisFault e1)
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false);
        stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(1600000);
        
        OrderServiceStub.SyncOrderRelationCfmReq req = new OrderServiceStub.SyncOrderRelationCfmReq();
        
        OrderServiceStub.SyncOrderRelationCfm syncOrderRelationCfm = new OrderServiceStub.SyncOrderRelationCfm();
        
        // 开户
        SyncOrderRelationCfmResponse syncOrderRelationCfmResp =
            new OrderServiceStub.SyncOrderRelationCfmResponse();
        
        req.setMsgTransactionID(msgHeaderClient.getTransactionID().getTransactionID());
        req.setCfmResult(msgHeaderClient.getProcResult());
        syncOrderRelationCfm.setSyncOrderRelationCfmReq(req);
        
        try
        {
            syncOrderRelationCfmResp =
                stub.syncOrderRelationCfm(syncOrderRelationCfm,
                    msgHeaderClient.getMsgName(),
                    msgHeaderClient.getTransactionID(),
                    msgHeaderClient.getVersion(),
                    msgHeaderClient.getSendAddress(),
                    msgHeaderClient.getDestAddress(),
                    msgHeaderClient.getOriginalAddress(),
                    msgHeaderClient.getTimeStamp());
        }
        catch (RemoteException e)
        {
            e.printStackTrace();
        }
        
        System.out.println(syncOrderRelationCfmResp.getSyncOrderRelationCfmResp().getResult());
        
        msgHeaderClient = null;
    }
    
}

解决方案 »

  1.   

    忘记标记出错的地方了!呵呵  补下!package com.chinamobile.www.vgop.serviceorder.v1_0;
    import java.rmi.RemoteException;import org.apache.axis2.AxisFault;
    import org.apache.axis2.transport.http.HTTPConstants;
    import com.chinamobile.www.vgop.serviceorder.v1_0_sub.OrderServiceStub;
    import com.chinamobile.www.vgop.serviceorder.v1_0_sub.OrderServiceStub.SyncOrderRelationCfmResponse;public class TaskObject implements Runnable
    {
        
      private MsgHeaderClient msgHeaderClient = null;
        
      public MsgHeaderClient getMsgHeaderClient()
      {
      return msgHeaderClient;
      }
        
      public void setMsgHeaderClient(MsgHeaderClient msgHeaderClient)
      {
      this.msgHeaderClient = msgHeaderClient;
      }
        
      public void run()
      {
      try
      {
      //睡眠1s,防止任务添加进来就执行,导致服务端还没有响应的时候就任务就已经执行了。
      Thread.sleep(1000L);
      }
      catch (InterruptedException e2)
      {
      e2.printStackTrace();
      }
      OrderServiceStub stub = null;
      try
      {
      stub = new OrderServiceStub("http://10.40.55.23:8080/bmp/services/OrderService");
      }
      catch (AxisFault e1)
      {
      // TODO Auto-generated catch block
      e1.printStackTrace();
      }
      stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false);
      stub._getServiceClient().getOptions().setTimeOutInMilliSeconds(1600000);
        
      OrderServiceStub.SyncOrderRelationCfmReq req = new OrderServiceStub.SyncOrderRelationCfmReq();
        
      OrderServiceStub.SyncOrderRelationCfm syncOrderRelationCfm = new OrderServiceStub.SyncOrderRelationCfm();
        
      // 开户
      SyncOrderRelationCfmResponse syncOrderRelationCfmResp =
      new OrderServiceStub.SyncOrderRelationCfmResponse();
        
      req.setMsgTransactionID(msgHeaderClient.getTransactionID().getTransactionID());
      req.setCfmResult(msgHeaderClient.getProcResult());
      syncOrderRelationCfm.setSyncOrderRelationCfmReq(req);
        
      try
      {
      syncOrderRelationCfmResp =
      stub.syncOrderRelationCfm(syncOrderRelationCfm,
      msgHeaderClient.getMsgName(),
      msgHeaderClient.getTransactionID(),
      msgHeaderClient.getVersion(),
      msgHeaderClient.getSendAddress(),
      msgHeaderClient.getDestAddress(),
      msgHeaderClient.getOriginalAddress(),
      msgHeaderClient.getTimeStamp());
      }
      catch (RemoteException e)
      {
      e.printStackTrace();
      }
        
      System.out.println(syncOrderRelationCfmResp.getSyncOrderRelationCfmResp().getResult());
        
      msgHeaderClient = null;
      }
        
    }
      

  2.   

    很久以前是这样调的
    TDSWebServiceLocator tdsLocator = new TDSWebServiceLocator();
    TDSWebServiceSoap tds = (TDSWebServiceSoap12Stub)tdsLocator.getTDSWebServiceSoap12() ;;
    result = tds.queryID(domain, username, password, id, port, DN);
      

  3.   

    你估计这个错有没有可能是跟WSDL文件本身有问题啊?
      

  4.   

    而且我的代码现在都是用AXIS2生成的。
      

  5.   

    你看你调用是不是有错
    web服务发布出来一般不会有错吧