title: How do I use WS-Addressing properly in an Axis2 client?
body: <p>All,
    I'm attempting to write a Junit test that calls a Web Service client in Axis2.1.5, and I've gotten confused about how to exactly to set it up to use WS-Addressing.</p>
  
  <p>I've generated a client stub using wsdl2java, and I'm using the axis2.xml and modules repository from the axis2 binary distribution.</p>
  
  <p>I know I need to use the MemberSubmission version of the WS-Addressing, and I <em>think</em> I've got that set up correctly (using Options), but the headers don't seem to get generated correctly.  (I say 'seem' because I can't figure out how to the SOAPMonitor module working either - I'd welcome any tips on that too!).</p>
  
  <p>My main confusion, though, is around what exactly it takes to 'engage' the Addressing module.  Should it be enough to set up my ConfigurationContext with an axis2.xml file that has a reference to the addressing module?  Like this? :</p>
  
  <pre><code>//standard out of the box axis2 configs
   ConfigurationContext myConfigContext = ConfigurationContextFactory
     .createConfigurationContextFromFileSystem("C:/devapps/axis2-1.5.1/repository","C:/devapps/axis2-1.5.1/conf/axis2.xml");
  
    Options options = new Options();
    EndpointReference targetEPR = new EndpointReference(
      "https://host:port/service.asmx");
  
    options.setTo(targetEPR);
  
                  //I believe this is what I'm supposed to do to specify the 
    //MemberSubmission version of WS-Addressing
    options.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
      AddressingConstants.Submission.WSA_NAMESPACE);
    //No idea of this is needed or not.
    options.setProperty(AddressingConstants.INCLUDE_OPTIONAL_HEADERS,
      Boolean.TRUE);
    options.activate(myConfigContext);
    options.setAction("someAction");
  
    CaseDetailsServiceStub stub = new CaseDetailsServiceStub(
      "https://host:port/service.asmx");
    stub._getServiceClient().setOptions(options);
  
    //I'm calling this from a Junit test
    assertNotNull(stub.someAction(someParam));
  </code></pre>
  
  <p>With my options set up like above, is see in the log file that the modules are getting loaded from axis2.xml:</p>
  
  <pre><code>[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar
  </code></pre>
  
  <p>But I don't think I'm getting any addressing headers.  The error I get back from the server at this point says:</p>
  
  <blockquote>
    <p>Header
    <a href="http://schemas.xmlsoap.org/ws/2004/08/addressing:Action" rel="noreferrer">http://schemas.xmlsoap.org/ws/2004/08/addressing:Action</a>
    for ultimate recipient is required but
    not present in the message.</p>
  </blockquote>
  
  <p>So, I've also seen some documents reference 'engaging' modules.  When I try to add this line to my code and add the addressing-1.5.1.mar to my classpath, though:</p>
  
  <pre><code>stub._getServiceClient().engageModule("addressing");
  </code></pre>
  
  <p>I get an error that says:</p>
  
  <p>Unable to engage module : addressing
  org.apache.axis2.AxisFault: Unable to engage module : soapmonitor
   at org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:358)</p>
  
  <p>No other info or stack trace in the logs beyond, that, though, so I'm confused.  </p>
  
  <p>Any ideas on what I'm doing wrong?</p>