I've created a web service that has a simple function that receives a
parameter:
package pt.gedi.ws;

import oasisNamesSpecificationUblSchemaXsdInvoice2.InvoiceDocument;

public class ReceiveInvoice {

        public void receive(InvoiceDocument invDoc) {
                doSomething(invDoc);
        }
}


For this service I've created a deploy.wsdd that goes like this:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/";
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
 <service name="InvoiceReceiver" style="document">
  <parameter name="className" value="pt.gedi.ws.ReceiveInvoice" />
  <parameter name="allowedMethods" value="receive" />
 </service>
</deployment>


Wich in turn gives this wsdl after deployment:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://localhost:8080/WS/services/InvoiceReceiver"; xmlns:apachesoap="http://xml.apache.org/xml-soap"; xmlns:impl="http://localhost:8080/WS/services/InvoiceReceiver"; xmlns:intf="http://localhost:8080/WS/services/InvoiceReceiver"; xmlns:tns1="http://oasisNamesSpecificationUblSchemaXsdInvoice2"; xmlns:tns2="http://ws.gedi.pt"; 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.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://ws.gedi.pt"; xmlns="http://www.w3.org/2001/XMLSchema";> <import The first thnamespace="http://oasisNamesSpecificationUblSchemaXsdInvoice2"/>
   <element name="invDoc" type="xsd:anyType"/>
  </schema>
 </wsdl:types>
   <wsdl:message name="receiveResponse">
   </wsdl:message>
   <wsdl:message name="receiveRequest">
      <wsdl:part element="tns2:invDoc" name="invDoc"/>
   </wsdl:message>
   <wsdl:portType name="ReceiveInvoice">
      <wsdl:operation name="receive" parameterOrder="invDoc">
         <wsdl:input message="impl:receiveRequest" name="receiveRequest"/>
<wsdl:output message="impl:receiveResponse" name="receiveResponse"/>
      </wsdl:operation>
   </wsdl:portType>
<wsdl:binding name="InvoiceReceiverSoapBinding" type="impl:ReceiveInvoice"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="receive">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="receiveRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="receiveResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="ReceiveInvoiceService">
<wsdl:port binding="impl:InvoiceReceiverSoapBinding" name="InvoiceReceiver"> <wsdlsoap:address location="http://localhost:8080/WS/services/InvoiceReceiver"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>


If I do a reload on the wsdl the line:

<import namespace="http://oasisNamesSpecificationUblSchemaXsdInvoice2"/>

disappears... and in the logs appears this:

- The class oasisNamesSpecificationUblSchemaXsdInvoice2.InvoiceDocument does not contain a default constructor, which is a requirement for a bean class. The class cannot be converted into an xml schema type. An xml schema anyType will be used to define this class in the wsdl file.

Can't use a bean as a parameter in the receive method?

What my client does is to build an InvoiceDocument type document and
send it to InvoceReceiver service.

If you print a sample document before sendig what you get is:
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:urn="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <urn:IssueDate>2007-02-06+00:00</urn:IssueDate>
</Invoice>

But when I invoke the service I get:

AxisFault
 faultCode: {http://xml.apache.org/axis/}Client
 faultSubcode:
 faultString: No such operation 'Invoice'
 faultActor:
 faultNode:
 faultDetail:
        {http://xml.apache.org/axis/}hostname:kheijo

No such operation 'Invoice'
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222) at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1772) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2923) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:1792)
        at pt.gedi.ws.client.SendInvoice.send(SendInvoice.java:22)
        at ubl.CreateInvoice.main(CreateInvoice.java:17)

Why is it looking for a operation with name "Invoice" ??? It is clearly specified that the operation is receive, either in service client and server.


Thanks in advance,
Pedro Silva

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to