Another approach you might take is to create your own provider -- that
way you have complete control over how requests are dispatched.

Anne

On 4/28/05, Anne Thomas Manes <[EMAIL PROTECTED]> wrote:
> Are you saying that you would like your SOAP message to look like this:
> 
> <env:Body>
>     <ricercaIndividuo>
>          <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
>     </ricercaIndividuo>
> </env:Body>
> 
> First -- the child of the <env:Body> element should be namespace
> qualified, so in general, I would say that this is a bad idea. The
> SOAP spec says that the child element MAY be namespace qualified, so,
> technically, it's okay that it isn't, but there's no way to define an
> unqualified element using WSDL, and I don't think that Axis can
> support it.
> 
> The only way that you can define this scenario in WSDL is to use the
> <xsd:any> element:
> 
> <wsdl:message name="byFiscalCodeRequest">
>    <wsdl:part name="body" element="xsd:any/>
> </wsdl:message>
> 
> But then you would not be able to expose multiple operations on the
> service. (Each operation must expose a unique method signature.)
> 
> If you are willing to namespace qualify your message payload, then you
> would be able to define the <ns1:ricercaIndividuo> as your input
> message:
> 
> <wsdl:message name="byFiscalCodeRequest">
>    <wsdl:part name="body" element="ns1:ricercaIndividuo/>
> </wsdl:message>
> 
> But this would only work if the <ns1:ricercaIndividuo> is unique to
> the byFiscalCode operation. If it isn't a unique signature, or if you
> can't namespace qualify the <ricercaIndividuo> element, then you would
> do better to keep the wrapper element that I described before.
> 
> If this is the case, then I suggest that you set up your schema thus:
> 
> <wsdl:types>
>   <xsd:schema targetNamespace="http://javabean.websrv.napsi.eng.it";
>      elementFormDefault="unqualified"/>
>      <xsd:element name="byFiscalCode">
>         <xsd:complexType>
>            <xsd:sequence>
>               <xsd:element name="ricercaIndividuo" type="anyType"/>
>            </xsd:sequence>
>         </xsd:complexType>
>      </xsd:element>
>   </xsd:schema>
> </wsdl:types>
> 
> <wsdl:message name="byFiscalCodeRequest">
>    <wsdl:part name="body" element="impl:byFiscalCode"/>
> </wsdl:message>
> 
> And then use the RPC provider instead of the message provider. Axis
> will then automatically dispatch the request to the proper method for
> you, and it should map the <ricercaIndividuo> element to a DOM for
> you.
> 
> I think that's what you want.
> 
> Anne
> 
> On 4/28/05, angeloimm <[EMAIL PROTECTED]> wrote:
> > Hi all; first of all i want to thank Anne Thomas Manes for her tips.
> > I want to ask a thing i have a web service built in java; it is a java 
> > class that has several methods.
> > Now in my axis.wsdd i have added a service like this one:
> >     <service name="Interaction" type="" regenerateElement="false"
> >         provider="java:MSG" style="message" use="literal" validate="false">
> >         <parameter name="scope" value="Request" regenerateElement="false"/>
> >         <parameter name="className"
> >             value="it.eng.napsi.websrv.javabean.Interaction" 
> > regenerateElement="false"/>
> >         <parameter name="allowedMethods" value="*" 
> > regenerateElement="false"/>
> >         <namespace>http://javabean.websrv.napsi.eng.it</namespace>
> >         <operation name="byFiscalCode"
> >             returnQName="ns1:byFiscalCodeReturn"
> >             returnType="xsd:anyType" qname="ns1:byFiscalCode"
> >             regenerateElement="false" 
> > xmlns:ns1="http://javabean.websrv.napsi.eng.it"/>
> >     </service>
> >
> > Now i have this simple client:
> > package it.eng.test.client.util;
> >
> > import org.apache.axis.client.Call;
> > import org.apache.axis.client.Service;
> > import org.apache.axis.message.SOAPBodyElement;
> > import org.apache.axis.message.SOAPBody;
> > import org.apache.axis.utils.XMLUtils;
> > import javax.xml.rpc.ServiceException;
> >
> > import java.util.Vector;
> > import org.w3c.dom.Document;
> > import javax.xml.namespace.QName;
> >
> > import org.apache.log4j.Logger;
> > import java.net.URL;
> > import java.net.MalformedURLException;
> > import javax.xml.parsers.DocumentBuilderFactory;
> > import javax.xml.parsers.DocumentBuilder;
> > import java.util.*;
> >
> > import it.eng.napsi.input.individuo.IndividualMarshaller;
> >
> > public class SimpleAxisClient {
> >     public SimpleAxisClient() {
> >     }
> >
> >     private static final Logger LOG = 
> > Logger.getLogger(SimpleAxisClient.class.
> >             getName());
> >
> >     private Call getCall(String endpoint, String operation) throws
> >             ServiceException {
> >
> >         if (LOG.isDebugEnabled()) {
> >
> >             LOG.debug("Creating call.....");
> >         }
> >         Call result = (Call) (new Service()).createCall();
> >         try {
> >             result.setTargetEndpointAddress(new URL(endpoint));
> >
> >         } catch (MalformedURLException ex) {
> >
> >             LOG.error(ex);
> >         }
> >
> >         result.setOperation(new QName(endpoint, operation), operation);
> >         if (LOG.isDebugEnabled()) {
> >
> >             LOG.debug("Done!!");
> >         }
> >         return result;
> >     }
> >
> >     public Document getDocument(Document doc, String endpoint,
> >                                 String operation) throws Exception {
> >         Call call = getCall(endpoint, operation);
> >         Vector result = (Vector) call.invoke(new Object[] {doc});
> >         //Vector result = (Vector) call.invoke(new SOAPBodyElement[] { new 
> > SOAPBodyElement( doc.getDocumentElement() )});
> >         SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
> >
> >         if (LOG.isDebugEnabled()) {
> >
> >             LOG.debug("Body ricevuto: " +
> >                       XMLUtils.DocumentToString(sbe.getAsDocument()));
> >         }
> >         return sbe.getAsDocument();
> >     }
> >
> >     public static void main(String args[]) throws Exception {
> >
> >         IndividualMarshaller ind = new IndividualMarshaller();
> >         Map envi = new Hashtable();
> >         envi.put( "codFisc","MMDNGL74C22H703K" );
> >         //String xmlString = ind.toStringDocument( envi );
> >         /*
> >         String xmlString = "<impl:doc 
> > xmlns:impl='http://javabean.websrv.napsi.eng.it'>"+
> >                            
> > "<ricercaIndividuo><codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>"+
> >                            "</ricercaIndividuo></impl:doc>";
> >          */
> >         String xmlString = "<impl:byFiscalCod 
> > xmlns:impl='http://javabean.websrv.napsi.eng.it'>"+
> >                            
> > "<ricercaIndividuo><codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>"+
> >                            "</ricercaIndividuo></impl:byFiscalCod>";
> >         System.out.println( xmlString );
> >         SimpleAxisClient client = new SimpleAxisClient();
> >         Call miaCall = client.getCall(
> >                 
> > "http://localhost:8082/ServicePublisher/services/Interaction","byFiscalCode";);
> >         Document doc = XMLUtils.newDocument(new 
> > java.io.ByteArrayInputStream(xmlString.getBytes()));
> >         System.out.println("doc.getDocumentElement(): " +
> >                            doc.getDocumentElement().getNodeName());
> >         Vector result = (Vector) miaCall.invoke
> >                         (new SOAPBodyElement[] {new SOAPBodyElement(doc.
> >                 getDocumentElement())});
> >         SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
> >
> >         System.out.println( "Ottenuto: "+ XMLUtils.DocumentToString( 
> > sbe.getAsDocument() ) );
> >     }
> > }
> >
> > As you can see i have this file xml:
> >
> > <impl:byFiscalCode xmlns:impl='http://javabean.websrv.napsi.eng.it'>
> >   <ricercaIndividuo>
> >           <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
> >   </ricercaIndividuo>
> > </impl:byFiscalCode>
> >
> > Now by doing so the method is called... but the document that it receives 
> > is the file xml that i have showed before; i'ld like that the document that 
> > the operation byFiscalCode accepts is
> >   <ricercaIndividuo>
> >           <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
> >   </ricercaIndividuo>
> >
> > How can i do?
> > If i must insert the operation name in the xml ( that is: 
> > <impl:byFiscalCode ) why must i use the
> >
> > setOperation(new QName(endpoint, operation), operation) method of Call 
> > object?
> > Thanks to all
> >
> > ____________________________________________________________
> > 6X velocizzare la tua navigazione a 56k? 6X Web Accelerator di Libero!
> > Scaricalo su INTERNET GRATIS 6X http://www.libero.it
> >
> >
>

Reply via email to