2010-03-26 11 views
7

Tutti, Sto tentando di scrivere un test Junit che chiama un client di servizio Web in Axis2.1.5 e mi sono confuso su come impostare esattamente per utilizzare WS-Addressing.Come si utilizza correttamente l'indirizzamento WS in un client Axis2?

Ho generato uno stub client utilizzando wsdl2java e sto utilizzando il repository axis2.xml e modules dalla distribuzione binaria axis2.

so che ho bisogno di utilizzare la versione MemberSubmission dei WS-Addressing, e io penso che c'ho impostato correttamente (mediante le Opzioni), ma le intestazioni non sembrano ottenere generato correttamente. (Dico "sembra" perché non riesco a capire come funziona il modulo SOAPMonitor - anch'io gradirei qualche consiglio su questo!).

La mia confusione principale, tuttavia, riguarda ciò che è esattamente necessario per "coinvolgere" il modulo di indirizzamento. Dovrebbe essere sufficiente configurare il mio ConfigurationContext con un file axis2.xml che abbia un riferimento al modulo di indirizzamento? Come questo? :

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

Con le mie opzioni impostate in su come sopra, è vedere nel file di registro che i moduli sono sempre caricati da axis2.xml:

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

Ma non credo che mi sto eventuali intestazioni di indirizzamento. L'errore che ottengo dal server a questo punto dice:

Header http://schemas.xmlsoap.org/ws/2004/08/addressing:Action per il destinatario finale è richiesta ma non presente nel messaggio.

Così, ho anche visto alcuni documenti di riferimento moduli 'coinvolgente'. Quando provo ad aggiungere questa riga al mio codice e aggiungere l'indirizzamento-1.5.1.mar al mio percorso di classe, però:

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

ottengo un errore che dice:

Impossibile impegnarsi modulo: l'indirizzamento org.apache.axis2.AxisFault: impossibile impegnarsi modulo: soapmonitor a org.apache.axis2.client.ServiceClient.engageModule (ServiceClient.java:358)

Nessun altra info o traccia dello stack nei log di là, questo, però, quindi sono confuso.

Qualche idea su cosa sto facendo male?

+0

Grazie per avermi fatto questa domanda, mi ha aiutato molto.Per coloro che potrebbero utilizzare questo codice come esempio, vorrei sottolineare che elduff ha utilizzato la versione di invio del namespace WSA. Lo spazio dei nomi finale è disponibile tramite AddressingConstants.Final.WSA_NAMESPACE. Questo era importante per me mentre cercavo di creare un client per un server JAX-WS 2.1 (Metro) usando Axis 2 1.5.1. e il cliente continuava a lamentarsi del fatto che mancassero gli header WSA. Il problema è stato causato dall'utilizzo di Submission.WSA_NAMESPACE nel client poiché il server utilizzava Final.WSA_NAMESPACE. –

risposta

7

inserire addressign.mar e sopamoniter.mar in lib o classpath del progetto. funziona per me trovare il mar del kit axis2

+0

Ciao Deepak, puoi dire in quale sistema operativo hai fatto questa correzione? Sto affrontando questo problema nel SO Linux (ambiente di test) e non in Windows (ambiente di sviluppo) –

2

Nel mio progetto Maven, ho dovuto dichiarare una dipendenza supplementare sulla org.apache.axis2:addressing artefatto:

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

non vedo alcun classpath-module artefatti per SoapMonitor on Maven Central, però.

Problemi correlati