2010-03-26 4 views
7

Alle, Ich versuche, einen Junit-Test zu schreiben, der einen Web-Service-Client in Axis2.1.5 aufruft, und ich bin verwirrt darüber, wie man es genau einrichten kann, um WS-Adressierung zu verwenden.Wie verwende ich die WS-Adressierung in einem Axis2-Client richtig?

Ich habe einen Client-Stub mit wsdl2java generiert, und ich verwende das Repository axis2.xml und Module aus der Binärverteilung axis2.

Ich weiß, ich muss die MemberSubmission-Version der WS-Adressierung verwenden, und ich denke, Ich habe das richtig eingerichtet (mit Optionen), aber die Header scheinen nicht korrekt generiert werden. (Ich sage 'scheine', weil ich nicht herausfinden kann, wie das SOAPMonitor-Modul funktioniert - ich würde auch irgendwelche Tipps dazu begrüßen!).

Meine Hauptverwirrung ist jedoch, was genau benötigt wird, um das Adressierungsmodul zu aktivieren. Sollte es ausreichen, meinen ConfigurationContext mit einer axis2.xml-Datei einzurichten, die einen Verweis auf das Adressierungsmodul hat? So was? :

//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)); 

Mit meinen Optionen wie oben aufgebaut, ist in der Log-Datei, die die Module von axis2.xml geladen werden immer:

[INFO] Deploying module: addressing-1.5.1 - file:/C:/devapps/axis2-1.5.1/repository/modules/addressing-1.5.1.mar 

Aber ich glaube nicht, ich bin immer irgendwelche Adressierungsheader. Der Fehler, den ich an dieser Stelle von dem Server wieder sagt:

Kopf http://schemas.xmlsoap.org/ws/2004/08/addressing:Action für ultimative Empfänger erforderlich ist, aber nicht in der Nachricht.

Also habe ich auch einige Dokumente gesehen, die "einnehmende" Module referenzieren. Wenn ich versuche, diese Linie zu meinem Code hinzuzufügen und die Adressierung-1.5.1.mar meinen Classpath hinzufügen, aber:

stub._getServiceClient().engageModule("addressing"); 

ich eine Fehlermeldung erhalten, die sagt:

kann nicht Modul engagieren: Adressieren org.apache.axis2.AxisFault: Kann Modul engagieren: soapmonitor bei org.apache.axis2.client.ServiceClient.engageModule (ServiceClient.java:358)

Keine andere Informationen oder Stack-Trace in den Protokollen über, das ist aber so, ich bin verwirrt.

Irgendwelche Ideen, was ich falsch mache?

+0

Danke für die Frage, es hat mir sehr geholfen.Für diejenigen, die diesen Code als Beispiel verwenden könnten, möchte ich darauf hinweisen, dass elduff die Submission-Version des WSA-Namespace verwendet hat. Der letzte Namespace ist über AddressingConstants.Final.WSA_NAMESPACE verfügbar. Dies war relevant für mich, als ich versuchte, einen Client für einen JAX-WS 2.1 (Metro) -Server mit Axis 2 1.5.1 zu erstellen. und der Kunde beschwerte sich, dass WSA-Header fehlten. Das Problem wurde durch die Verwendung von Submission.WSA_NAMESPACE im Client als Server Final.WSA_NAMESPACE verursacht. –

Antwort

7

put addressign.mar und sopamoniter.mar in lib oder Klassenpfad des Projekts. es funktioniert für mich den mar von axis2 Kit

+0

Hallo Deepak, kannst du bitte sagen in welchem ​​Betriebssystem du das behoben hast? Ich stehe dieses Problem in Linux OS (Testumgebung) und nicht in Windows (Entwicklungsumgebung) –

2

In meinem Maven Projekt finden, hatte ich eine zusätzliche Abhängigkeit von dem org.apache.axis2:addressing Artefakt zu erklären:

<dependency> 
    <groupId>org.apache.axis2</groupId> 
    <artifactId>addressing</artifactId> 
    <version>1.6.2</version> 
    <classifier>classpath-module</classifier> 
</dependency> 
MyServiceStub stub = new MyServiceStub(targetEndpoint); 
stub._getServiceClient().engageModule("addressing"); 

Ich sehe keine classpath-module Artefakte für SoapMonitor on Maven Central, obwohl.