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]