Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
Windows XP Prof. SP2 (german), Pentium 2,8 Ghz, 2 GB RAM
Description
Hi guys,
i wrote my problem to the mailing list some month ago. i never got an answer until i accidental found a reply on google
so here is the mail.
-------
Hi guys,
its the first time that i am using the axis framework with c++ (usually
i do not develop with c/c++).
I wrote a simple calculation web service with java and deployed it to
the app-server.
The following wsdl has been generated:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:ns0="http://test.cadenas.de"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://test.cadenas.de">
<wsdl:documentation>TestService</wsdl:documentation>
<wsdl:types>
<xs:schema xmlns:ns="http://test.cadenas.de"
attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://test.cadenas.de">
<xs:element name="add">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="num1"
type="xs:int"/>
<xs:element minOccurs="0" name="num2"
type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="addResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return"
type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="addRequest">
<wsdl:part name="parameters" element="ns0:add"/>
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part name="parameters" element="ns0:addResponse"/>
</wsdl:message>
<wsdl:portType name="TestServicePortType">
<wsdl:operation name="add">
<wsdl:input message="ns0:addRequest" wsaw:Action="urn:add"/>
<wsdl:output message="ns0:addResponse"
wsaw:Action="urn:addResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TestServiceSOAP11Binding"
type="ns0:TestServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="add">
<soap:operation soapAction="urn:add" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="TestServiceSOAP12Binding"
type="ns0:TestServicePortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
<wsdl:operation name="add">
<soap12:operation soapAction="urn:add" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="TestServiceHttpBinding"
type="ns0:TestServicePortType">
<http:binding verb="POST"/>
<wsdl:operation name="add">
<http:operation location="TestService/add"/>
<wsdl:input>
<mime:content type="text/xml" part="add"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="add"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TestService">
<wsdl:port name="TestServiceSOAP11port_http"
binding="ns0:TestServiceSOAP11Binding">
<soap:address
location="http://localhost:8080/cadenas/services/TestService"/>
</wsdl:port>
<wsdl:port name="TestServiceSOAP12port_http"
binding="ns0:TestServiceSOAP12Binding">
<soap12:address
location="http://localhost:8080/cadenas/services/TestService"/>
</wsdl:port>
<wsdl:port name="TestServiceHttpport"
binding="ns0:TestServiceHttpBinding">
<http:address
location="http://localhost:8080/cadenas/services/TestService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
You can see that it is a very simple service, which provides a "int
add(int,int)" method.
I used the wsdl2ws tool to get this declaration for the "add" method:
STORAGE_CLASS_INFO xsd_int * add(xsdint * Value0, xsd_int * Value1);
Generally i do not have a problem with pointers (tho i don't like
primitive type pointers),
but when i get an xsd__int* back from method which is always empty
(NULL) im worried
I found the reason in the generated class "TestServicePortType" in
method "add":
(read comments please)
...
xsd__int * pReturn = m_pCall->getElementAsInt("return", 0);
if(pReturn)
...
I changed the datatype of variable "Ret" and the return type of the
method from "xsd_int*" to "xsd_int" and now everything works fine.
Is this a generally known bug or is there a way to tell the wsdl2ws
tool, that i dont like primitive datatype
pointers as return value?
It's also possible that i am completely wrong... so please help me
Regards,
Manuel
Sorry for my bad english.