axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anne Thomas Manes <atma...@gmail.com>
Subject Re: Axis1.2 RC3 Couldn't find an appropriate operation for XML QName
Date Wed, 27 Apr 2005 13:52:28 GMT
I take it that you didn't like the WSDL I sent you last time. I think
your problem is that you're trying to use the JBuilder tool, which
keeps trying to take you down the wrong path.

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

On 4/27/05, angeloimm <angeloimm@libero.it> 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
> 
>

Mime
View raw message