Now you have to make sure that your WSDD maps the impl:doc QName to
the appropriate method in your service. You do that using the
<operation> element:
http://www.osmoticweb.com/axis-wsdd/operation.htm

Anne

On 4/27/05, angeloimm <[EMAIL PROTECTED]> wrote:
> ---------- Initial Header -----------
> 
> From      : "Anne Thomas Manes" [EMAIL PROTECTED]
> To          : [email protected]
> Cc          :
> Date      : Wed, 27 Apr 2005 09:52:28 -0400
> Subject : Re: Axis1.2 RC3 Couldn't find an appropriate operation for XML QName
> 
> > I take it that you didn't like the WSDL I sent you last time.
>    Oh no... i liked your WSDL; i'll never end to thanks you.
> The problem is that i need to use an IDE; i have seen some Eclipse plugin 
> (Lomboz and Lavadora) but i don't like them very much. I must use an IDE 
> since i'll have to create 114 clients from WSDL so i'm starting from creating 
> test web services and schemas so that i can use them (it's from 10 days that 
> i'm studing Web Services, Axis and WS-BPEL and i have some confusion). The 
> pnly IDE i know better than Eclipse is JBuilder and now i'm working with it, 
> even if i'm waiting for IBM Web Tools M4.
> 
> > I think
> > your problem is that you're trying to use the JBuilder tool, which
> > keeps trying to take you down the wrong path.
>   This is the problem.
> >
> > Here are some problems with your WSDL:
> >
> > 1- you should not use type="apachesoap:document". This type is not
> > described in any schema, so only Axis knows how to interpret it. As I
> > said in my last response to you, you should specify the schema for
> > your document in your WSDL, even if you intend to use the messaging
> > API. If you aren't willing to specify the actual message structure in
> > your WSDL, then use type="xsd:anyType".
> >
> > 2- you should not specify the parameterOrder attribute in the
> > <wsdl:operation> definition.
> >
> > 3- every operation in your service must have a unique request message
> > signature. The signature is determined by the QName of the child of
> > the <soap:body> element. So, for example, (based on your current WSDL)
> > the input message for the byFiscalCode request must look like this:
> >
> > <env:Body>
> >   <impl:doc xmlns:impl="http://javabean.websrv.napsi.eng.it";>
> >         <ricercaIndividuo>
> >            <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
> >         </ricercaIndividuo>
> >   </impl:doc>
> > </env:Body>
> >
> > If you wish to send the same root element (<ricercaIndividuo>) to all
> > of your methods, then you should create one interface, and then in
> > your service you can interpet the request based on the message
> > contents (<codiceFiscale>).
> >
> > Anne
> Let's suppose i have changed my WSDL file in the right way; in this moment i 
> need to call the web service.... i have tried to call by using
> 
>  <env:Body>
>     <impl:doc xmlns:impl="http://javabean.websrv.napsi.eng.it";>
>          <ricercaIndividuo>
>             <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
>          </ricercaIndividuo>
>    </impl:doc>
>  </env:Body>
> 
> But i have always the same error that is:
> HTTP/1.1 500 Internal Server Error
> 
> X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-3.2.6 (build: 
> CVSTag=JBoss_3_2_6 date=200410140106)
> 
> Content-Type: text/xml;charset=utf-8
> 
> Date: Wed, 27 Apr 2005 16:00:29 GMT
> 
> Server: Apache-Coyote/1.1
> 
> Connection: close
> 
> <?xml version="1.0" encoding="utf-8"?>
>    <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
>       <soapenv:Body>
>          <soapenv:Fault>
>             <faultcode>soapenv:Server.generalException</faultcode>
>             <faultstring>Couldn't find an appropriate operation for XML QName 
> {http://javabean.websrv.napsi.eng.it}doc</faultstring>
>             <detail>
>                <ns1:hostname 
> xmlns:ns1="http://xml.apache.org/axis/";>PORT-IMMEDIATA</ns1:hostname>
>             </detail>
>          </soapenv:Fault>
>       </soapenv:Body>
>    </soapenv:Envelope>
> 
> If i use a java class that has only one method all works fine..... why?
> 
> >
> > On 4/27/05, angeloimm <[EMAIL PROTECTED]> wrote:
> > > Hi all... sorry for the disturb but i don't understand :-) ; i have this 
> > > client:
> > > 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 {
> > >
> > >     /**
> > >      * Il logger
> > >      */
> > >     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","XXXXXXXXXXXXX" );
> > >         String xmlString = ind.toStringDocument( envi );
> > >         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() ) );
> > >     }
> > > }
> > >
> > > This is my service:
> > > package it.eng.napsi.websrv.javabean;
> > >
> > > //Java stuff
> > > import org.w3c.dom.Document;
> > > import java.rmi.RemoteException;
> > >
> > > //Eng stuff
> > > import it.eng.napsi.util.RetrieveProperties;
> > > import it.eng.napsi.handlers.model.DataHandler;
> > > import it.eng.napsi.handlers.DataHandlerFactory;
> > > import it.eng.napsi.constraint.DataHandlerConstraint;
> > >
> > > //Log4j stuff
> > > import org.apache.log4j.Logger;
> > > import it.eng.napsi.handlers.exception.HandlerException;
> > >
> > > public class Interaction {
> > >
> > >     private String dataSourceName;
> > >     private DataHandler handler;
> > >     private static final Logger LOG = Logger.getLogger(Interaction.class.
> > >             getName());
> > >
> > >     public Interaction(){
> > >
> > >         try {
> > >             dataSourceName = "anagrafe";
> > >             if( LOG.isDebugEnabled() ){
> > >
> > >                 LOG.debug( "RetrieveProperties has given to me: "+ 
> > > dataSourceName );
> > >             }
> > >             handler = DataHandlerFactory.getInstance().getHandler(
> > >                     DataHandlerConstraint.JDBC_TYPE, dataSourceName);
> > >         } catch (HandlerException ex) {
> > >
> > >             LOG.error("HandlerException", ex);
> > >         }
> > >     }
> > >     public Document byFiscalCode(Document doc) throws RemoteException {
> > >         try {
> > >             return handler.individualSearch(doc);
> > >         } catch (HandlerException ex) {
> > >
> > >             throw new RemoteException("HandlerException", ex);
> > >         }
> > >     }
> > >
> > >     public Document byUserData(Document input) throws RemoteException {
> > >         try {
> > >             return handler.individualSearch(input);
> > >         } catch (HandlerException ex) {
> > >
> > >             throw new RemoteException("HandlerException", ex);
> > >         }
> > >     }
> > >     public Document byFamilyCode(Document input) throws RemoteException {
> > >         try {
> > >             return handler.individualSearch(input);
> > >         } catch (HandlerException ex) {
> > >
> > >             throw new RemoteException("HandlerException", ex);
> > >         }
> > >     }
> > >
> > >     public Document toponomastic(Document input) throws RemoteException {
> > >         try {
> > >             return handler.toponomasticSearch(input);
> > >         } catch (HandlerException ex) {
> > >
> > >             throw new RemoteException("HandlerException", ex);
> > >         }
> > >     }
> > >
> > >     public Document update(Document input) throws RemoteException {
> > >         try {
> > >             return handler.update(input);
> > >         } catch (HandlerException ex) {
> > >
> > >             throw new RemoteException("HandlerException", ex);
> > >         }
> > >
> > >     }
> > > }
> > >
> > > This is the wsdl:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <wsdl:definitions targetNamespace="http://javabean.websrv.napsi.eng.it"; 
> > > xmlns:apachesoap="http://xml.apache.org/xml-soap"; 
> > > xmlns:impl="http://javabean.websrv.napsi.eng.it"; 
> > > xmlns:intf="http://javabean.websrv.napsi.eng.it"; 
> > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
> > > xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"; 
> > > xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
> > > <!--WSDL created by Apache Axis version: 1.2beta3
> > > Built on Aug 01, 2004 (05:59:22 PDT)-->
> > >  <wsdl:types>
> > >   <schema elementFormDefault="qualified" 
> > > targetNamespace="http://javabean.websrv.napsi.eng.it"; 
> > > xmlns="http://www.w3.org/2001/XMLSchema";>
> > >    <import namespace="http://xml.apache.org/xml-soap"/>
> > >    <element name="input" type="apachesoap:Document"/>
> > >    <element name="updateReturn" type="apachesoap:Document"/>
> > >    <element name="doc" type="apachesoap:Document"/>
> > >    <element name="byFiscalCodeReturn" type="apachesoap:Document"/>
> > >    <element name="input1" type="apachesoap:Document"/>
> > >    <element name="byUserDataReturn" type="apachesoap:Document"/>
> > >    <element name="input2" type="apachesoap:Document"/>
> > >    <element name="byFamilyCodeReturn" type="apachesoap:Document"/>
> > >    <element name="input3" type="apachesoap:Document"/>
> > >    <element name="toponomasticReturn" type="apachesoap:Document"/>
> > >   </schema>
> > >  </wsdl:types>
> > >
> > >    <wsdl:message name="toponomasticRequest">
> > >
> > >       <wsdl:part element="impl:input3" name="input"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="updateResponse">
> > >
> > >       <wsdl:part element="impl:updateReturn" name="updateReturn"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byFamilyCodeRequest">
> > >
> > >       <wsdl:part element="impl:input2" name="input"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byUserDataRequest">
> > >
> > >       <wsdl:part element="impl:input1" name="input"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="toponomasticResponse">
> > >
> > >       <wsdl:part element="impl:toponomasticReturn" 
> > > name="toponomasticReturn"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byFamilyCodeResponse">
> > >
> > >       <wsdl:part element="impl:byFamilyCodeReturn" 
> > > name="byFamilyCodeReturn"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="updateRequest">
> > >
> > >       <wsdl:part element="impl:input" name="input"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byUserDataResponse">
> > >
> > >       <wsdl:part element="impl:byUserDataReturn" name="byUserDataReturn"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byFiscalCodeResponse">
> > >
> > >       <wsdl:part element="impl:byFiscalCodeReturn" 
> > > name="byFiscalCodeReturn"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:message name="byFiscalCodeRequest">
> > >
> > >       <wsdl:part element="impl:doc" name="doc"/>
> > >
> > >    </wsdl:message>
> > >
> > >    <wsdl:portType name="Interaction">
> > >
> > >       <wsdl:operation name="update" parameterOrder="input">
> > >
> > >          <wsdl:input message="impl:updateRequest" name="updateRequest"/>
> > >
> > >          <wsdl:output message="impl:updateResponse" 
> > > name="updateResponse"/>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byFiscalCode" parameterOrder="doc">
> > >
> > >          <wsdl:input message="impl:byFiscalCodeRequest" 
> > > name="byFiscalCodeRequest"/>
> > >
> > >          <wsdl:output message="impl:byFiscalCodeResponse" 
> > > name="byFiscalCodeResponse"/>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byUserData" parameterOrder="input">
> > >
> > >          <wsdl:input message="impl:byUserDataRequest" 
> > > name="byUserDataRequest"/>
> > >
> > >          <wsdl:output message="impl:byUserDataResponse" 
> > > name="byUserDataResponse"/>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byFamilyCode" parameterOrder="input">
> > >
> > >          <wsdl:input message="impl:byFamilyCodeRequest" 
> > > name="byFamilyCodeRequest"/>
> > >
> > >          <wsdl:output message="impl:byFamilyCodeResponse" 
> > > name="byFamilyCodeResponse"/>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="toponomastic" parameterOrder="input">
> > >
> > >          <wsdl:input message="impl:toponomasticRequest" 
> > > name="toponomasticRequest"/>
> > >
> > >          <wsdl:output message="impl:toponomasticResponse" 
> > > name="toponomasticResponse"/>
> > >
> > >       </wsdl:operation>
> > >
> > >    </wsdl:portType>
> > >
> > >    <wsdl:binding name="InteractionSoapBinding" type="impl:Interaction">
> > >
> > >       <wsdlsoap:binding style="document" 
> > > transport="http://schemas.xmlsoap.org/soap/http"/>
> > >
> > >       <wsdl:operation name="update">
> > >
> > >          <wsdlsoap:operation soapAction=""/>
> > >
> > >          <wsdl:input name="updateRequest">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:input>
> > >
> > >          <wsdl:output name="updateResponse">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:output>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byFiscalCode">
> > >
> > >          <wsdlsoap:operation soapAction=""/>
> > >
> > >          <wsdl:input name="byFiscalCodeRequest">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:input>
> > >
> > >          <wsdl:output name="byFiscalCodeResponse">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:output>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byUserData">
> > >
> > >          <wsdlsoap:operation soapAction=""/>
> > >
> > >          <wsdl:input name="byUserDataRequest">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:input>
> > >
> > >          <wsdl:output name="byUserDataResponse">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:output>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="byFamilyCode">
> > >
> > >          <wsdlsoap:operation soapAction=""/>
> > >
> > >          <wsdl:input name="byFamilyCodeRequest">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:input>
> > >
> > >          <wsdl:output name="byFamilyCodeResponse">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:output>
> > >
> > >       </wsdl:operation>
> > >
> > >       <wsdl:operation name="toponomastic">
> > >
> > >          <wsdlsoap:operation soapAction=""/>
> > >
> > >          <wsdl:input name="toponomasticRequest">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:input>
> > >
> > >          <wsdl:output name="toponomasticResponse">
> > >
> > >             <wsdlsoap:body use="literal"/>
> > >
> > >          </wsdl:output>
> > >
> > >       </wsdl:operation>
> > >
> > >    </wsdl:binding>
> > >
> > >    <wsdl:service name="InteractionService">
> > >
> > >       <wsdl:port binding="impl:InteractionSoapBinding" name="Interaction">
> > >
> > >          <wsdlsoap:address 
> > > location="http://localhost:8080/ServicePublisher/services/Interaction"/>
> > >
> > >       </wsdl:port>
> > >
> > >    </wsdl:service>
> > >
> > > </wsdl:definitions>
> > >
> > > This is the axis.wsdd service definition:
> > >     <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>
> > >     </service>
> > >
> > > I'm using JBuilder 2005, Axis1.2RC3, JBoss3.2.6, JVM1.4.2_07; when i try 
> > > this client the request SOAP message is:
> > >
> > > POST /ServicePublisher/services/Interaction HTTP/1.0
> > >
> > > Content-Type: text/xml; charset=utf-8
> > >
> > > Accept: application/soap+xml, application/dime, multipart/related, text/*
> > >
> > > User-Agent: Axis/1.2RC3
> > >
> > > Host: 127.0.0.1:8082
> > >
> > > Cache-Control: no-cache
> > >
> > > Pragma: no-cache
> > >
> > > SOAPAction: ""
> > >
> > > Content-Length: 351
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > >    <soapenv:Envelope 
> > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
> > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> > >       <soapenv:Body>
> > >          <ricercaIndividuo>
> > >             <codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
> > >          </ricercaIndividuo>
> > >       </soapenv:Body>
> > >    </soapenv:Envelope>
> > >
> > > Well the response is:
> > > HTTP/1.1 500 Internal Server Error
> > >
> > > X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-3.2.6 (build: 
> > > CVSTag=JBoss_3_2_6 date=200410140106)
> > >
> > > Content-Type: text/xml;charset=utf-8
> > >
> > > Date: Wed, 27 Apr 2005 13:14:37 GMT
> > >
> > > Server: Apache-Coyote/1.1
> > >
> > > Connection: close
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > >    <soapenv:Envelope 
> > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; 
> > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> > >       <soapenv:Body>
> > >          <soapenv:Fault>
> > >             <faultcode>soapenv:Server.generalException</faultcode>
> > >             <faultstring>Couldn't find an appropriate operation for XML 
> > > QName ricercaIndividuo</faultstring>
> > >             <detail>
> > >                <ns1:hostname 
> > > xmlns:ns1="http://xml.apache.org/axis/";>PORT-IMMEDIATA</ns1:hostname>
> > >             </detail>
> > >          </soapenv:Fault>
> > >       </soapenv:Body>
> > >    </soapenv:Envelope>
> > >
> > > Can anybody tell me why?
> > > Thanks
> > >
> > > ____________________________________________________________
> > > Navighi a 4 MEGA e i primi 3 mesi sono GRATIS.
> > > Scegli Libero Adsl Flat senza limiti su http://www.libero.it
> > >
> > >
> >
> 
> ____________________________________________________________
> Navighi a 4 MEGA e i primi 3 mesi sono GRATIS.
> Scegli Libero Adsl Flat senza limiti su http://www.libero.it
> 
>

Reply via email to