axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michele Mazzucco <Michele.Mazzu...@ncl.ac.uk>
Subject Re: [Axis2] JAX-WS & working at xml level on the client side
Date Mon, 15 Oct 2007 08:47:02 GMT
Hi Martin,

I want to work at the XML level because I don't want to care about WSDLs
since the service is just a proxy service.

Michele


On Sat, 2000-10-14 at 11:27 -0400, Martin Gainty wrote:
> Michele-
> if your properties file contains an Action property set to DEFAULT
> (and the default for Action is DEFAULT)
> you can set the soapAction in your WSDL e.g.
>  
>   <binding name="City_BBBBinding" type="tns:City_BBBPortType">
>     <soap:binding style="document"
>     transport="http://schemas.xmlsoap.org/soap/http" />
>  
>     <operation name="getAttraction">
>       <soap:operation soapAction="getAttraction" />
> 
> Did I miss anything Group?
>  
> Martin
>         ----- Original Message ----- 
>         From: Brian De Pradine 
>         To: axis-user@ws.apache.org 
>         Sent: Saturday, October 13, 2007 7:16 AM
>         Subject: Re: [Axis2] JAX-WS & working at xml level on the
>         client side
>         
>         
>         
>         Hello Michele, 
>         
>         It appears that the request cannot be dispatched based solely
>         on the content of the SOAP body. Try setting the SOAPAction
>         explicitly before you call dispatch.invoke() 
>         
>                     Map<String, Object> map =
>         dispatch.getRequestContext(); 
>                     map.put(BindingProvider.SOAPACTION_USE_PROPERTY,
>         Boolean.TRUE); 
>                     map.put(BindingProvider.SOAPACTION_URI_PROPERTY,
>         "..."); 
>         
>         Cheers
>         
>         Brian DePradine
>         Web Services Development
>         IBM Hursley
>         External  +44 (0) 1962 816319         Internal 246319
>         
>         If you can't find the time to do it right the first time,
>         where will you find the time to do it again?
>         
>         
>         Michele Mazzucco <Michele.Mazzucco@ncl.ac.uk> wrote on
>         12/10/2007 10:22:35:
>         
>         > Nick.
>         > 
>         > thanks, but I can't get it working.
>         > 
>         > Here is the service (it's like SOAP12Provider, but without
>         > dependencies):
>         > 
>         > package service.jaxws;
>         > 
>         > import javax.xml.ws.BindingType;
>         > import javax.xml.ws.Provider;
>         > import javax.xml.ws.WebServiceProvider;
>         > import javax.xml.ws.soap.SOAPBinding;
>         > 
>         > /**
>         >  * A Provider&lt;String&gt; implementation used to test
>         sending and 
>         >  * receiving SOAP 1.2 messages.
>         >  */
>         > @WebServiceProvider()
>         > @BindingType(SOAPBinding.SOAP12HTTP_BINDING)
>         > public class SOAP12Provider implements Provider<String> {
>         > 
>         >     private static final String sampleResponse = 
>         >         "<test:echoStringResponse xmlns:test=
>         > \"http://org/apache/axis2/jaxws/test/SOAP12\">" +
>         >         "<test:output>SAMPLE REQUEST MESSAGE</test:output>"
>         +
>         >         "</test:echoStringResponse>";
>         >     
>         >     /* 
>         >      * @see javax.xml.ws.Provider#invoke(java.lang.Object)
>         >      */
>         >     public String invoke(String obj) {
>         >         System.out.printf("Received >>> %s\n", obj);
>         >         return sampleResponse;
>         >     }
>         > 
>         > }
>         > 
>         > 
>         > which runs into an embedded axis2 instance:
>         > 
>         > import java.util.HashMap;
>         > import java.util.Map;
>         > 
>         > 
>         > import org.apache.axis2.AxisFault;
>         > import org.apache.axis2.context.ConfigurationContext;
>         > import org.apache.axis2.context.ConfigurationContextFactory;
>         > import org.apache.axis2.description.AxisService;
>         > import org.apache.axis2.transport.http.SimpleHTTPServer;
>         > import org.apache.log4j.BasicConfigurator;
>         > 
>         > import service.jaxws.SOAP12Provider;
>         > 
>         > /**
>         >  * <a href="http://wso2.org/library/83">How do I Embed
>         SimpleHTTPServer
>         > in My
>         >  * Application and Deploy a POJO?</a>
>         >  * 
>         >  */
>         > public class EmbeddedAxis2Server {
>         >     
>         >     static {
>         >         BasicConfigurator.configure();
>         >     }
>         > 
>         >     /**
>         >      * @param args
>         >      */
>         >     public static void main(String[] args) throws AxisFault
>         {
>         >         ConfigurationContext context =
>         ConfigurationContextFactory
>         >
>           .createConfigurationContextFromFileSystem(null, null);
>         > 
>         >         Map<String, String> map = new HashMap<String,
>         String>(1);
>         >         map.put("http://www.w3.org/2004/08/wsdl/in-out",
>         > "org.apache.axis2.jaxws.server.JAXWSMessageReceiver");
>         > 
>         >         AxisService echoJaxWs =
>         > AxisService.createService(SOAP12Provider.class.getName(),
>         >             context.getAxisConfiguration(), map,
>         > "http://org/apache/axis2/jaxws/test/SOAP12",
>         > "http://org/apache/axis2/jaxws/test/SOAP12",
>         >             Thread.currentThread().getContextClassLoader());
>         >
>         context.getAxisConfiguration().addService(echoJaxWs);
>         > 
>         >         SimpleHTTPServer server = new
>         SimpleHTTPServer(context, 8080);
>         >         server.start();
>         >     }
>         > 
>         > }
>         > 
>         > 
>         > The client is SOAP12Dispatch + the main method
>         > 
>         > import java.io.ByteArrayInputStream;
>         > import java.io.ByteArrayOutputStream;
>         > 
>         > import javax.xml.ws.Service.Mode;
>         > import javax.xml.namespace.QName;
>         > import javax.xml.transform.Source;
>         > import javax.xml.transform.Transformer;
>         > import javax.xml.transform.TransformerFactory;
>         > import javax.xml.transform.stream.StreamResult;
>         > import javax.xml.transform.stream.StreamSource;
>         > import javax.xml.ws.Dispatch;
>         > import javax.xml.ws.Service;
>         > import javax.xml.ws.soap.SOAPBinding;
>         > import javax.xml.ws.soap.SOAPFaultException;
>         > 
>         > import org.apache.log4j.BasicConfigurator;
>         > 
>         > public class SOAP12Dispatch {
>         > 
>         >     private static final QName QNAME_SERVICE = new QName(
>         >         "http://org/apache/axis2/jaxws/test/SOAP12",
>         "SOAP12Service");
>         > 
>         >     private static final QName QNAME_PORT = new QName(
>         >         "http://org/apache/axis2/jaxws/test/SOAP12",
>         "SOAP12Port");
>         > 
>         >     private static final String URL_ENDPOINT =
>         > "http://localhost:8080/axis2/services/SOAP12Provider";
>         > 
>         >     private static final String sampleRequest =
>         "<test:echoString
>         > xmlns:test=\"http://org/apache/axis2/jaxws/test/SOAP12\">"
>         >             + "<test:input>SAMPLE REQUEST
>         MESSAGE</test:input>" +
>         > "</test:echoString>";
>         > 
>         >     private static final String sampleEnvelopeHead =
>         "<soapenv:Envelope
>         > xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\">"
>         >             + "<soapenv:Header /><soapenv:Body>";
>         > 
>         >     private static final String
>         sampleEnvelopeHead_MustUnderstand =
>         > "<soapenv:Envelope xmlns:soapenv=
>         > \"http://www.w3.org/2003/05/soap-envelope\">"
>         >             + "<soapenv:Header>"
>         >             + "<soapenv:codeHeaderSOAP12
>         soapenv:mustUnderstand=\"true
>         > \">"
>         >             + "<code>default</code>"
>         >             + "</soapenv:codeHeaderSOAP12>"
>         >             + "</soapenv:Header>" + "<soapenv:Body>";
>         > 
>         >     private static final String sampleEnvelopeTail =
>         > "</soapenv:Body></soapenv:Envelope>";
>         > 
>         >     private static final String sampleEnvelope =
>         sampleEnvelopeHead +
>         > sampleRequest
>         >             + sampleEnvelopeTail;
>         > 
>         >     private static final String
>         sampleEnvelope_MustUnderstand =
>         > sampleEnvelopeHead_MustUnderstand
>         >             + sampleRequest + sampleEnvelopeTail;
>         > 
>         > 
>         >     /**
>         >      * Test sending a SOAP 1.2 request in PAYLOAD mode
>         >      */
>         >     public void testSOAP12DispatchPayloadMode() throws
>         Exception {
>         >         // Create the JAX-WS client needed to send the
>         request
>         >         Service service = Service.create(QNAME_SERVICE);
>         >         service.addPort(QNAME_PORT,
>         SOAPBinding.SOAP12HTTP_BINDING,
>         > URL_ENDPOINT);
>         >         Dispatch<Source> dispatch = service.createDispatch(
>         >                 QNAME_PORT, Source.class, Mode.PAYLOAD);
>         >         
>         >         // Create the Source object with the payload
>         contents.  Since
>         >         // we're in PAYLOAD mode, we don't have to worry
>         about the
>         > envelope.
>         >         byte[] bytes = sampleRequest.getBytes();
>         >         ByteArrayInputStream bais = new
>         ByteArrayInputStream(bytes);
>         >         StreamSource request = new StreamSource(bais);
>         >         
>         >         // Send the SOAP 1.2 request
>         >         Source response = dispatch.invoke(request);
>         >         
>         >         // Convert the response to a more consumable format
>         >         ByteArrayOutputStream baos = new
>         ByteArrayOutputStream();
>         >         StreamResult result = new StreamResult(baos);
>         >         
>         >         TransformerFactory factory =
>         TransformerFactory.newInstance();
>         >         Transformer trans = factory.newTransformer();
>         >         trans.transform(response, result);
>         >         
>         >         // Check to make sure the contents are correct.
>          Again, since
>         > we're
>         >         // in PAYLOAD mode, we shouldn't have anything
>         related to the
>         > envelope
>         >         // in the return, just the contents of the Body.
>         >         String responseText = baos.toString();
>         >         if (responseText.contains("soap")) {
>         >             throw new IllegalStateException("the response
>         contains
>         > 'soap'");
>         >         }
>         >         if (responseText.contains("Body")) {
>         >             throw new IllegalStateException("the response
>         contains
>         > 'Body'");
>         >         }
>         >         if (responseText.contains("Envelope")) {
>         >             throw new IllegalStateException("the response
>         contains
>         > 'Envelope'");
>         >         }
>         >         if (responseText.contains("echoStringResponse")) {
>         >             throw new IllegalStateException("the response
>         contains
>         > 'echoStringResponse'");
>         >         }       
>         >     }
>         >     
>         >     /**
>         >      * Test sending a SOAP 1.2 request in MESSAGE mode
>         >      */
>         >     public void testSOAP12DispatchMessageMode() throws
>         Exception {
>         >         // Create the JAX-WS client needed to send the
>         request
>         >         Service service = Service.create(QNAME_SERVICE);
>         >         service.addPort(QNAME_PORT,
>         SOAPBinding.SOAP12HTTP_BINDING,
>         > URL_ENDPOINT);
>         >         Dispatch<Source> dispatch = service.createDispatch(
>         >                 QNAME_PORT, Source.class, Mode.MESSAGE);
>         >         
>         >         // Create the Source object with the message
>         contents.  Since
>         >         // we're in MESSAGE mode, we'll need to make sure we
>         create this
>         >         // with the right protocol.
>         >         byte[] bytes = sampleEnvelope.getBytes();
>         >         ByteArrayInputStream bais = new
>         ByteArrayInputStream(bytes);
>         >         StreamSource request = new StreamSource(bais);
>         >         
>         >         Source response = dispatch.invoke(request);
>         >         
>         >         // Convert the response to a more consumable format
>         >         ByteArrayOutputStream baos = new
>         ByteArrayOutputStream();
>         >         StreamResult result = new StreamResult(baos);
>         >         
>         >         TransformerFactory factory =
>         TransformerFactory.newInstance();
>         >         Transformer trans = factory.newTransformer();
>         >         trans.transform(response, result);
>         >         
>         >         // Check to make sure the contents of the message
>         are correct
>         >         String responseText = baos.toString();
>         >         
>         >         if (! responseText.contains("soap")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'soap'");
>         >         }
>         >         if (! responseText.contains("Body")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'Body'");
>         >         }
>         >         if (! responseText.contains("Envelope")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'Envelope'");
>         >         }
>         >         if (! responseText.contains("echoStringResponse")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'echoStringResponse'");
>         >         }
>         >         
>         >         // Check to make sure the message returned had the
>         right
>         > protocol version
>         >         // TODO: Need to determine whether or not we should
>         be using the
>         > hard 
>         >         // coded URLs here, or whether we should be using a
>         constant for
>         > the 
>         >         // purposes of the test.
>         >         if (!
>         >
>         responseText.contains("http://www.w3.org/2003/05/soap-envelope")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'http://www.w3.org/2003/05/soap-envelope'");
>         >         }
>         >         if (!
>         >
>         responseText.contains("http://schemas.xmlsoap.org/soap/envelop")) {
>         >             throw new IllegalStateException("the response
>         does not
>         > contain 'http://schemas.xmlsoap.org/soap/envelop'");
>         >         }
>         >     }
>         >     
>         >     /**
>         >      * Test sending a SOAP 1.2 request in MESSAGE mode
>         >      */
>         >     public void
>         testSOAP12DispatchMessageMode_MustUnderstand() throws
>         > Exception {
>         >         // Create the JAX-WS client needed to send the
>         request
>         >         Service service = Service.create(QNAME_SERVICE);
>         >         service.addPort(QNAME_PORT,
>         SOAPBinding.SOAP12HTTP_BINDING,
>         > URL_ENDPOINT);
>         >         Dispatch<Source> dispatch = service.createDispatch(
>         >                 QNAME_PORT, Source.class, Mode.MESSAGE);
>         >         
>         >         // Create the Source object with the message
>         contents.  Since
>         >         // we're in MESSAGE mode, we'll need to make sure we
>         create this
>         >         // with the right protocol.
>         >         byte[] bytes =
>         sampleEnvelope_MustUnderstand.getBytes();
>         >         ByteArrayInputStream bais = new
>         ByteArrayInputStream(bytes);
>         >         StreamSource request = new StreamSource(bais);
>         >         
>         >         SOAPFaultException e = null;
>         >         try {
>         >             @SuppressWarnings("unused")
>         >             Source response = dispatch.invoke(request);
>         >             throw new RuntimeException("We should have an
>         exception, but
>         > none was thrown.", e);
>         >         } catch (SOAPFaultException ex) {
>         >             System.out.println("ok, exception expected");
>         >             e = ex;
>         >             
>         > 
>         >             if (!
>         >
>         "MustUnderstand".equals(e.getFault().getFaultCodeAsQName().getLocalPart())) {
>         >                 throw new RuntimeException("FaultCode should
>         be
>         > \"MustUnderstand\"");
>         >             }
>         >         }
>         >     }
>         >     
>         >     
>         >     /**
>         >      * @param args
>         >      * @throws Exception 
>         >      */
>         >     public static void main(String[] args) throws Exception
>         {
>         >         BasicConfigurator.configure();
>         >         SOAP12Dispatch dispatch = new SOAP12Dispatch();
>         >         dispatch.testSOAP12DispatchPayloadMode();
>         >     }
>         > 
>         > }
>         > 
>         > 
>         > 
>         > When I run it I get this error on the client side, it
>         doesn't matter
>         > whether the endpoint is 
>         > http://localhost:8080/axis2/services/SOAP12Provider
>         > or
>         > http://localhost:8080/axis2/services/SOAP12ProviderService
>         > 
>         > 
>         > 4894 [main] DEBUG
>         > org.apache.axis2.jaxws.message.util.impl.SAAJConverterImpl
>          - Converting
>         > OMElement to an SAAJ SOAPElement
>         > Exception in thread "main"
>         javax.xml.ws.soap.SOAPFaultException: The
>         > endpoint reference (EPR) for the Operation not found is
>         > 127.0.0.1/axis2/services/SOAP12Provider and the WSA Action =
>         > urn:anonOutInOp
>         >    at
>         >
>         org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.
>         > createSystemException(MethodMarshallerUtils.java:1192)
>         >    at
>         > org.apache.axis2.jaxws.client.dispatch.BaseDispatch.
>         > getFaultResponse(BaseDispatch.java:405)
>         >    at
>         > org.apache.axis2.jaxws.client.dispatch.BaseDispatch.
>         > invoke(BaseDispatch.java:170)
>         >    at
>         > service.jaxws.SOAP12Dispatch.
>         > testSOAP12DispatchPayloadMode(SOAP12Dispatch.java:81)
>         >    at
>         service.jaxws.SOAP12Dispatch.main(SOAP12Dispatch.java:205)
>         > 
>         > 
>         > 
>         > Any idea?
>         > 
>         > Michele
>         > 
>         > On Thu, 2007-10-11 at 13:03 -0500, Nicholas L Gallardo
>         wrote:
>         > > There are also a number of examples in the JAX-WS test
>         bucket. 
>         > > 
>         > > Look at org.apache.axis2.jaxws.dispatch.*
>         > > 
>         > > -Nick
>         > > 
>         > > Inactive hide details for Brian De Pradine
>         <PRADINE@uk.ibm.com>Brian
>         > > De Pradine <PRADINE@uk.ibm.com>
>         > > 
>         > > 
>         > >                                 Brian De Pradine
>         <PRADINE@uk.ibm.com> 
>         > >                                 
>         > >                                 10/11/2007 07:02 AM 
>         > >                                 Please respond to
>         > >                                 axis-user@ws.apache.org
>         > >                                 
>         > > 
>         > >                To
>         > > 
>         > > axis-user@ws.apache.org
>         > > 
>         > >                cc
>         > > 
>         > > 
>         > > 
>         > >           Subject
>         > > 
>         > > Re: [Axis2]
>         > > JAX-WS & working
>         > > at xml level on
>         > > the client side
>         > > 
>         > > 
>         > > 
>         > > 
>         > > Hello Michele, 
>         > > 
>         > > You can find info about dispatch clients at [1]. 
>         > > 
>         > > [1]
>         https://jax-ws.dev.java.net/nonav/2.1.2/docs/dispatch.html 
>         > > 
>         > > Cheers
>         > > 
>         > > Brian DePradine
>         > > Web Services Development
>         > > IBM Hursley
>         > > External +44 (0) 1962 816319 Internal 246319
>         > > 
>         > > If you can't find the time to do it right the first time,
>         where will
>         > > you find the time to do it again?
>         > > 
>         > > 
>         > > Michele Mazzucco <Michele.Mazzucco@ncl.ac.uk> wrote on
>         11/10/2007
>         > > 12:47:39:
>         > > 
>         > > > Hi Brian,
>         > > > 
>         > > > what do you mean?, do you have any example?
>         > > > 
>         > > > Thanks,
>         > > > Michele
>         > > > 
>         > > > On Thu, 2007-10-11 at 12:45 +0100, Brian De Pradine
>         wrote:
>         > > > > 
>         > > > > Hello Michele, 
>         > > > > 
>         > > > > Try creating a dispatch client. 
>         > > > > 
>         > > > > Cheers
>         > > > > 
>         > > > > Brian DePradine
>         > > > > Web Services Development
>         > > > > IBM Hursley
>         > > > > External  +44 (0) 1962 816319         Internal 246319
>         > > > > 
>         > > > > If you can't find the time to do it right the first
>         time, where
>         > > will
>         > > > > you find the time to do it again?
>         > > > > 
>         > > > > 
>         > > > > Michele Mazzucco <Michele.Mazzucco@ncl.ac.uk> wrote
on
>         11/10/2007
>         > > > > 10:57:35:
>         > > > > 
>         > > > > > Hi all,
>         > > > > > 
>         > > > > > I understand that by implementing the
>         javax.xml.ws.Provider
>         > > > > interface
>         > > > > > it's possible to work at low level (i.e. to control
>         the XML
>         > > which is
>         > > > > > sent back and forth).
>         > > > > > Now, if I have a service which implements the
>         Provider interface
>         > > is
>         > > > > > there any way to work at low level on the client
>         side as well,
>         > > that
>         > > > > is
>         > > > > > the same way as ServiceClient + RawXML.. msg.
>         receivers + Axiom?
>         > > > > > 
>         > > > > > 
>         > > > > > Thanks,
>         > > > > > Michele
>         > > > > > 
>         > > > > > 
>         > > > > >
>         > > > >
>         > >
>         ---------------------------------------------------------------------
>         > > > > > To unsubscribe, e-mail:
>         axis-user-unsubscribe@ws.apache.org
>         > > > > > For additional commands, e-mail:
>         axis-user-help@ws.apache.org
>         > > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > >
>         > >
>         ______________________________________________________________________
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > Unless stated otherwise above:
>         > > > > IBM United Kingdom Limited - Registered in England and
>         Wales with
>         > > > > number 741598. 
>         > > > > Registered office: PO Box 41, North Harbour,
>         Portsmouth, Hampshire
>         > > PO6
>         > > > > 3AU 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > > 
>         > > > 
>         > > > 
>         > > >
>         > >
>         ---------------------------------------------------------------------
>         > > > To unsubscribe, e-mail:
>         axis-user-unsubscribe@ws.apache.org
>         > > > For additional commands, e-mail:
>         axis-user-help@ws.apache.org
>         > > > 
>         > > 
>         > > 
>         > > 
>         > > 
>         > > 
>         > > 
>         > >
>         ______________________________________________________________________
>         > > 
>         > > 
>         > > 
>         > > Unless stated otherwise above:
>         > > IBM United Kingdom Limited - Registered in England and
>         Wales with
>         > > number 741598. 
>         > > Registered office: PO Box 41, North Harbour, Portsmouth,
>         Hampshire PO6
>         > > 3AU 
>         > > 
>         > > 
>         > > 
>         > > 
>         > > 
>         > 
>         > 
>         >
>         ---------------------------------------------------------------------
>         > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
>         > For additional commands, e-mail:
>         axis-user-help@ws.apache.org
>         > 
>         
>         
>         
>         
>         ______________________________________________________________
>         
>         
>         
>         
>         Unless stated otherwise above:
>         IBM United Kingdom Limited - Registered in England and Wales
>         with number 741598. 
>         Registered office: PO Box 41, North Harbour, Portsmouth,
>         Hampshire PO6 3AU 
>         
>         
>         
>         
>         
>         


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Mime
View raw message