2016-04-06 6 views
0

Ich habe einen SOAP-WebServiceProvider in JAX-WS eingerichtet, aber ich habe Probleme herauszufinden, wie man Anfrage und Antwort im XML-Format von einer SOAP-Anfrage und -Antwort erhält. Hier ist ein Beispiel des Code, den ich jetzt habe, und wo ich versuche, die XML zu greifen:SOAP-Anfrage und Antwort im XML-Format konvertieren?

  package com.ewb.socialbanking.creditcardMain; 
      import org.springframework.ws.client.core.support.WebServiceGatewaySupport; 
      import org.springframework.ws.soap.client.core.SoapActionCallback; 
      import com.ewb.socialbanking.creditcardws.GetCcNumber; 
      import com.ewb.socialbanking.creditcardws.GetCcNumberResponse; 
      import com.safenet.wsdl.LoginUser; 

      /*THIS IS HOW I AM GIVING THE REQUEST : 
     AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); 
       ctx.register(CreditCardConfig.class); 
      ctx.refresh(); 

      CreditCardClient cCClient = ctx.getBean(CreditCardClient.class); 
      GetCcNumber cCNumber = new GetCcNumber(); 

    ObjectFactory enrollObjFactory = new ObjectFactory(); 

    cCNumber.setT24Cif(enrollObjFactory.createString("abc")); 
    cCNumber.setLinkId(enrollObjFactory.createString("def")); 
    cCNumber.setCcCif(enrollObjFactory.createString("ghi")); 
    cCNumber.setMsgRefNo(enrollObjFactory.createString("jkl")); 

    GetCcNumberResponse valueForRes = cCClient.getCreditCardDetails(cCNumber);*/ 



     public class CreditCardClient extends WebServiceGatewaySupport { 
     public GetCcNumberResponse getCreditCardDetails(GetCcNumber request) { 
     //I want here request in xml format?? 
     System.out.println("req : "+request); 
     //Right now it is coming as : 
     //req : [email protected] 
     GetCcNumberResponse response = null; 
    try { 
     response = (GetCcNumberResponse) getWebServiceTemplate() 
       .marshalSendAndReceive(
         request, 
         new SoapActionCallback(
           "http://F9M9MV1RENTAL:8088/mocksoap/GetCcNumber")); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    //I want here response in xml format?? 
    System.out.println("res : "+response); 
     //Right now it is coming as : 
     //res : [email protected] 
    return response; 
} 

}

+0

Sie müssen das Objekt in eine Zeichenfolge serialisieren. – Rao

+0

nein es funktioniert nicht :( – Asad

+0

Bitte jemanden helfen .... seine sehr dringende Anforderung .... bitte lassen Sie mich wissen, wenn Sie etwas fragen möchten! – Asad

Antwort

0

ich von mir selbst habe versucht, und es funktioniert. Wenn Sie die SOAP-Nachricht erhalten möchten, verwenden Sie am besten einen Handler auf der Serverseite. Der folgende ist mein Handler.

package com.documentType.handler; 

import java.io.IOException; 
import java.util.Set; 

import javax.xml.namespace.QName; 
import javax.xml.soap.SOAPException; 
import javax.xml.ws.handler.MessageContext; 
import javax.xml.ws.handler.soap.SOAPHandler; 
import javax.xml.ws.handler.soap.SOAPMessageContext; 

public class TestHandler implements SOAPHandler<SOAPMessageContext> { 

    @Override 
    public void close(MessageContext arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean handleFault(SOAPMessageContext arg0) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    // this method will be called twice (in and out) 
    @Override 
    public boolean handleMessage(SOAPMessageContext context) { 

     // true if the msg is going out 
     Boolean outBoundMsg = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

     try { 
      if (outBoundMsg) { 
       System.out.println("this is response"); 
       context.getMessage().writeTo(System.out); 
      } else { 
       System.out.println("this is request"); 
       context.getMessage().writeTo(System.out); 
      } 

     } catch (SOAPException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return true; 
    } 

    @Override 
    public Set<QName> getHeaders() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

Die Ausgabe in der Konsole ist wie das folgende

this is request 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:echo xmlns:ns2="http://ws.documentType.com/"><arg0>yoyoyo</arg0></ns2:echo></S:Body></S:Envelope> 
this is response 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:echoResponse xmlns:ns2="http://ws.documentType.com/"><return>echo: yoyoyo</return></ns2:echoResponse></S:Body></S:Envelope> 

Wenn Sie Schwierigkeiten einen Handler hinzufügen müssen, folgen Sie dem folgenden Tutorial

http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-server-side/

http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-client-side/

http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-testing-for-client-and-server-side/

0

JAX-WS-Dienste geben JAXB-Objekte zurück. Wenn Sie dieses Objekt einem Ausgabestream zuweisen möchten, verwenden Sie einfach die JAXB-API.

Marshaller m = JAXBContext.newInstance(GetCcNumberResponse.class).createMarshaller(); 
m.marshal(response, System.out); 
Verwandte Themen