Manuel, This seems to be a bug in the generator, Please open a JIRA - but I will look into it, eventually.
Nadir K. Amra Manuel Freiholz <[EMAIL PROTECTED]> wrote on 11/13/2007 01:41:44 AM: > 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(xsd__int * 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 :P > > 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) > { > Ret = *pReturn; // byVal (copy) would be better. > Axis::AxisDelete( (void *) pReturn, XSD_INT); // Deletes > the memory to which "Ret" points. > } > ... > > 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. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
