Re: Newbie question
| From: | Peter Guy | Date: | Tue, 31 Jan 2006 22:55:04 +0000 |
| Subject: | Re: Newbie question | ||
| References: | 1 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-2101@lists.php.net to get a copy of this message | ||
The structure of your WSDL looks alright, although the namespaces are not
setup correctly.
That may be because you cut them out for brevity in your post...
I think your problem is with Axis, not PHP.
What's happening is that Axis doesn't know how to turn the "Number" complex
type into a Java object (it's called "deserialization", and it's the bane of
the Web Service author).
You need to help Axis out a little by including a beanMapping element in
your wsdd file. Something along these lines may work:
<service>
...
<beanMapping qname="ns:Number"
languageSpecificType="java:samples.stock.StockQuoteService.Number"/>
...
</service>
Although you may need to use a typeMapping element, depending on your Java
object.
Check out http://www.osmoticweb.com/axis-wsdd/
for more wsdd goodness.
hth,
-Peter
"Patrick Hanna" <phanna@email.unc.edu> wrote in message
news:C0052195.22EF%phanna@email.unc.edu...
> I cannot for the life of me get this to work. I have a service with this
> wsdl:
>
> <wsdl:definitions
>
> targetNamespace="http://192.168.0.2:8080/axis/services/quotes"¾egzà-Ö†{íj„A
> >
> <!--
> WSDL created by Apache Axis version: 1.3
> Built on Oct 05, 2005 (05:23:37 EDT)
> -->
> <wsdl:types>
> <schema
> targetNamespace="http://stock.samples/">
> <import
namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
> <complexType name="Number">
> <sequence>
> <element name="data" type="xsd:float"/>
> </sequence>
> </complexType>
> </schema>
> </wsdl:types>
> <wsdl:message name="testResponse">
> <wsdl:part name="testReturn" type="tns1:Number"/>
> </wsdl:message>
> <wsdl:message name="testRequest">
> <wsdl:part name="in0" type="tns1:Number"/>
> </wsdl:message>
> <wsdl:portType name="StockQuoteService">
> <wsdl:operation name="test" parameterOrder="in0">
> <wsdl:input message="impl:testRequest"
> name="testRequest"/>
> <wsdl:output message="impl:testResponse"
> name="testResponse"/>
> </wsdl:operation>
> </wsdl:portType>
> <wsdl:binding name="quotesSoapBinding"
> type="impl:StockQuoteService">
> <wsdlsoap:binding style="rpc"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> <wsdl:operation name="test">
> <wsdlsoap:operation soapAction=""/>
> <wsdl:input name="testRequest">
> <wsdlsoap:body
>
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://stock.samples"
> use="encoded"/>
> </wsdl:input>
> <wsdl:output name="testResponse">
> <wsdlsoap:body
>
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
> namespace="http://192.168.0.2:8080/axis/services/quotes"
> use="encoded"/>
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:service name="StockQuoteServiceService">
> <wsdl:port binding="impl:quotesSoapBinding" name="quotes">
> <wsdlsoap:address
>
> location="http://192.168.0.2:8080/axis/services/quotes"/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
> Basically I have a service with a test() method that takes a complexType
> Number and returns another complexType Number. I've been able to return
> things from the test method and bind them to a Number object or just use
> ->{"data"} to access the result. I cannot pass objects correctly though.
>
> All my attempts at passing objects result in "org.xml.sax.SAXException: No
> object was found for class type class samples.stock.StockQuoteService."
I'm
> not sure what I'm doing wrong or if my wsdl is incorrect. What is the
proper
> way to pass a complex type to an object? I've tried using wsdl2php but I
> received the same error so I assume my wsdl must be incorrect.
>
> Can someone please help? Any pointers will be appreciated.
>
> Pat