3 Replies Latest reply on Nov 16, 2006 9:25 PM by peixubin peixubin

    jbossws4ee call gsoap's webservice problem

    peixubin peixubin Newbie

      I'm testing jbossws4ee client and gsoap server.(jbossws1.0.3 call gsoap's ws successly)

      the gsoap service header file c2gWS.h:

      //gsoap ns service name: C2g
      //gsoap ns service style: document
      //gsoap ns service encoding: literal
      
      //gsoap ns service namespace: http://ydxt.c2g/wsdl
      //gsoap ns service location: http://localhost:8888/c2g.cgi
      
      //gsoap ns schema namespace: urn:c2g
      
      typedef char * xsd__string;
      typedef int xsd__int;
      typedef long xsd__long;
      typedef float xsd__float;
      typedef double xsd__double;
      
      struct ns__csb {
       xsd__int *id;
       xsd__string mc;
       xsd__string sbbm;
       xsd__int * dy;
       xsd__int * sblx;
       xsd__double * xsl;
       xsd__double * gdl;
       xsd__double * sdl;
       xsd__double * edrl;
       xsd__double * yhrl;
       xsd__double * yhsl;
       xsd__string rq;
       xsd__string minrq;
       xsd__string maxrq;
       xsd__string glbz;
      };
      
      
      struct ns__csbArray {
       struct ns__csb * __ptr;
       int __size;
       int __offset;
      };
      
      
      struct ns__C2gException {
       xsd__int *code;
      };
      
      
      ns__getGsb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
      ns__getSb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
      


      run soapcpp2 -1 -c c2gWS.h,generate c stub file and wsdl.
      C2g.wsdl:

      
      <?xml version="1.0" encoding="UTF-8"?>
      <definitions name="C2g"
       targetNamespace="http://ydxt.c2g/wsdl"
       xmlns:tns="http://ydxt.c2g/wsdl"
       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:ns="urn:c2g"
       xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:MIME="http://schemas.xmlsoap.org/wsdl/mime/"
       xmlns:DIME="http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/"
       xmlns:WSDL="http://schemas.xmlsoap.org/wsdl/"
       xmlns="http://schemas.xmlsoap.org/wsdl/">
      
      <types>
      
       <schema targetNamespace="urn:c2g"
       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:ns="urn:c2g"
       xmlns="http://www.w3.org/2001/XMLSchema"
       elementFormDefault="qualified"
       attributeFormDefault="qualified">
       <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
       <complexType name="csb">
       <sequence>
       <element name="id" type="xsd:int" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="mc" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="sbbm" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="dy" type="xsd:int" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="sblx" type="xsd:int" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="xsl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="gdl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="sdl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="edrl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="yhrl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="yhsl" type="xsd:double" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="rq" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="minrq" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="maxrq" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="glbz" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       <complexType name="csbArray">
       <sequence>
       <element name="item" type="ns:csb" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
       </sequence>
       </complexType>
       <complexType name="C2gException">
       <sequence>
       <element name="code" type="xsd:int" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       <!-- operation request element -->
       <element name="getGsb">
       <complexType>
       <sequence>
       <element name="dwdm" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="input" type="ns:csbArray" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       </element>
       <!-- operation response element -->
       <element name="getGsbResponse">
       <complexType>
       <sequence>
       <element name="return" type="ns:csbArray" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       </element>
       <!-- operation request element -->
       <element name="getSb">
       <complexType>
       <sequence>
       <element name="dwdm" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
       <element name="input" type="ns:csbArray" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       </element>
       <!-- operation response element -->
       <element name="getSbResponse">
       <complexType>
       <sequence>
       <element name="return" type="ns:csbArray" minOccurs="0" maxOccurs="1" nillable="true"/>
       </sequence>
       </complexType>
       </element>
       </schema>
      
      </types>
      
      <message name="getGsbRequest">
       <part name="parameters" element="ns:getGsb"/>
      </message>
      
      <message name="getGsbResponse">
       <part name="parameters" element="ns:getGsbResponse"/>
      </message>
      
      <message name="getSbRequest">
       <part name="parameters" element="ns:getSb"/>
      </message>
      
      <message name="getSbResponse">
       <part name="parameters" element="ns:getSbResponse"/>
      </message>
      
      <portType name="C2gPortType">
       <operation name="getGsb">
       <documentation>Service definition of function ns__getGsb</documentation>
       <input message="tns:getGsbRequest"/>
       <output message="tns:getGsbResponse"/>
       </operation>
       <operation name="getSb">
       <documentation>Service definition of function ns__getSb</documentation>
       <input message="tns:getSbRequest"/>
       <output message="tns:getSbResponse"/>
       </operation>
      </portType>
      
      <binding name="C2g" type="tns:C2gPortType">
       <SOAP:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
       <operation name="getGsb">
       <SOAP:operation soapAction=""/>
       <input>
       <SOAP:body parts="parameters" use="literal"/>
       </input>
       <output>
       <SOAP:body parts="parameters" use="literal"/>
       </output>
       </operation>
       <operation name="getSb">
       <SOAP:operation soapAction=""/>
       <input>
       <SOAP:body parts="parameters" use="literal"/>
       </input>
       <output>
       <SOAP:body parts="parameters" use="literal"/>
       </output>
       </operation>
      </binding>
      
      <service name="C2g">
       <documentation>gSOAP 2.7.8c generated service definition</documentation>
       <port name="C2g" binding="tns:C2g">
       <SOAP:address location="http://localhost:8888/c2g.cgi"/>
       </port>
      </service>
      
      </definitions>
      


      config.xml used by wscompile:
      <?xml version="1.0" encoding="UTF-8"?>
      
      <configuration
       xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
      
       <wsdl location="gen-src/C2g.wsdl"
       packageName="ydxt.c2g">
       </wsdl>
      
      </configuration>
      
      



      run wscompile -keep -f:documentliteral -f:wsi -import -mapping jaxrpc-mapping.xml config.xml,generate java stub file:
      the C2G.java:

      
      
      public interface C2G extends javax.xml.rpc.Service {
       public ydxt.c2g.C2GPortType getC2G() throws ServiceException;
      }
      
      
      





      the C2GPortType.java:

      
      
      public interface C2GPortType extends java.rmi.Remote {
       public ydxt.c2g.GetGsbResponse getGsb(ydxt.c2g.GetGsb parameters) throws
       java.rmi.RemoteException;
       public ydxt.c2g.GetSbResponse getSb(ydxt.c2g.GetSb parameters) throws
       java.rmi.RemoteException;
      }
      
      



      ejb-jar.xml:
      <?xml version="1.0"?>
      <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
       version="2.1">
      
      <enterprise-beans>
      <session>
      <ejb-name>C2gSessionBean</ejb-name>
      <home>ydxt.c2g.C2gSessionHome</home>
      <remote>ydxt.c2g.C2gSession</remote>
      <local-home>ydxt.c2g.C2gSessionLocalHome</local-home>
      <local>ydxt.c2g.C2gSessionLocal</local>
      <ejb-class>ydxt.c2g.C2gSessionBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
       <service-ref>
       <service-ref-name>service/C2g</service-ref-name>
       <service-interface>ydxt.c2g.C2G</service-interface>
       <wsdl-file>META-INF/C2g.wsdl</wsdl-file>
       <jaxrpc-mapping-file>META-INF/jaxrpc-mapping.xml</jaxrpc-mapping-file>
      <!--
       <port-component-ref>
       <service-endpoint-interface>ydxt.c2g.C2GPortType</service-endpoint-interface>
       </port-component-ref>
      -->
       </service-ref>
      
      </session>
      </enterprise-beans>
      </ejb-jar>
      
      
      
      client code:
      
      ...
       GetGsbResponse res=null;
       try {
       res=getService().getGsb(new GetGsb(dwdm,null));
       } catch (Exception e) {
       e.printStackTrace();
       throw new C2GServerException(e.getMessage());
       }
      ...
      
      
      
      
      
      when I call web service ,the jboss print error:
      08:53:55,761 DEBUG [ServiceProxy] Invoke on jaxrpc service: getPort
      08:53:55,761 DEBUG [PortProxy] Invoke on service endpoint interface: getGsb
      08:53:55,762 DEBUG [CallImpl] Fixing style: [was=rpc,is=document]
      08:53:55,762 DEBUG [CallImpl] Fixing use: [was=encoded,is=literal]
      08:53:55,764 DEBUG [ClientEngine] invoke: org.jboss.axis.MessageContext@466b6f5
      08:53:55,764 DEBUG [HandlerChainBaseImpl] Create a handler chain for roles: null
      08:53:55,764 DEBUG [ClientEngine] Using handler chain for port: C2g
      08:53:55,764 DEBUG [HandlerChainBaseImpl] Create a handler chain for roles: null
      08:53:55,764 DEBUG [ClientEngine] Using empty handler chain
      08:53:55,764 DEBUG [HandlerChainBaseImpl] init: [config=null]
      08:53:55,764 DEBUG [HandlerChainBaseImpl] Enter: doHandleRequest
      08:53:55,764 DEBUG [HandlerChainBaseImpl] Exit: doHandleRequest with status: tru e
      08:53:55,774 DEBUG [HandlerChainBaseImpl] Enter: handleResponse
      08:53:55,774 DEBUG [HandlerChainBaseImpl] Exit: handleResponse with status: true
      08:53:55,791 ERROR [Call] Exception:
      org.xml.sax.SAXException: Invalid element in ydxt.c2g.GetGsbResponse - return
       at org.jboss.axis.encoding.ser.BeanDeserializer.onStartChild(Ljava.lang. String;Ljava.lang.String;Ljava.lang.String;Lorg.xml.sax.Attributes;Lorg.jboss.ax is.encoding.DeserializationContext;)Lorg.jboss.axis.message.SOAPHandler;(BeanDes erializer.java:432)
       at org.jboss.axis.encoding.DeserializationContextImpl.startElement(Ljava .lang.String;Ljava.lang.String;Ljava.lang.String;Lorg.xml.sax.Attributes;)V(Dese rializationContextImpl.java:1168)
      ...
      
      
      gsoap send.log:
      
      <?xml version="1.0" encoding="UTF-8"?>
      <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:c2g"><SOAP-ENV:Body><ns:getGsbResponse>
      <ns:return><ns:item><ns:id>1</ns:id><ns:mc>mc111</ns:mc><ns:sbbm>sbbm111</ns:sbbm><ns:dy>11</ns:dy><ns:sblx>12</ns:sblx><ns:xsl/><ns:gdl/><ns:sdl/><ns:edrl/><ns:yhrl/>
      <ns:yhsl/><ns:rq/><ns:minrq/><ns:maxrq/><ns:glbz/></ns:item><ns:item><ns:id>2</ns:id><ns:mc>mc222</ns:mc><ns:sbbm>sbbm222</ns:sbbm><ns:dy>21</ns:dy>
      <ns:sblx>22</ns:sblx><ns:xsl/>
      <ns:gdl/><ns:sdl/><ns:edrl/><ns:yhrl/><ns:yhsl/><ns:rq/><ns:minrq/><ns:maxrq/><ns:glbz/></ns:item></ns:return></ns:getGsbResponse>
      </SOAP-ENV:Body></SOAP-ENV:Envelope>
      
      
      
      
      
      
      
      gsoap recv.log:
      
      <?xml version="1.0" encoding="UTF-8"?>
      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <soapenv:Body>
       <ns1:getGsb xmlns:ns1="urn:c2g">
       <dwdm>335401</dwdm>
       <input xsi:nil="1"/>
       </ns1:getGsb>
       </soapenv:Body>
      </soapenv:Envelope>
      
      
      
      
      
      help me!
      


        • 1. Re: jbossws4ee call gsoap's webservice problem
          peixubin peixubin Newbie


          
          ns__getGsb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
          ns__getSb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
          
          


          I replace "_return" with result, "_input" with input, the testcase runs successly!!! why?


          but when the jbossws4ee client processes null number value,jboss reported error:
          09:47:58,246 DEBUG [HandlerChainBaseImpl] init: [config=null]
          09:47:58,246 DEBUG [HandlerChainBaseImpl] Enter: doHandleRequest
          09:47:58,246 DEBUG [HandlerChainBaseImpl] Exit: doHandleRequest with status: true
          09:47:58,254 DEBUG [HandlerChainBaseImpl] Enter: handleResponse
          09:47:58,254 DEBUG [HandlerChainBaseImpl] Exit: handleResponse with status: true
          09:47:58,330 ERROR [Call] Exception:
          java.lang.NumberFormatException: empty String
          at org.jboss.axis.encoding.ser.SimpleDeserializer.onEndElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(SimpleDeserializer.java:242)
          at org.jboss.axis.encoding.DeserializerImpl.endElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(DeserializerImpl.java:582)
          at org.jboss.axis.encoding.DeserializationContextImpl.endElement(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)V(DeserializationContextImpl.java:1249)
          at org.jboss.axis.message.SAX2EventRecorder.replay(IILorg.xml.sax.ContentHandler;)V(SAX2EventRecorder.java:252)
          at org.jboss.axis.message.SOAPElementAxisImpl.publishToHandler(Lorg.xml.sax.ContentHandler;)V(SOAPElementAxisImpl.java:1389)
          at org.jboss.axis.message.RPCElement.deserialize()V(RPCElement.java:262)
          at org.jboss.axis.message.RPCElement.getParams()Ljava.util.Vector;(RPCElement.java:396)
          ...




          • 2. Re: jbossws4ee call gsoap's webservice problem
            peixubin peixubin Newbie

             

            "peixubin" wrote:

            
            ns__getGsb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
            ns__getSb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
            
            


            I replace "_return" with result, "_input" with input, the testcase runs successly!!! why?


            but when the jbossws4ee client processes null number value,jboss reported error:
            09:47:58,246 DEBUG [HandlerChainBaseImpl] init: [config=null]
            09:47:58,246 DEBUG [HandlerChainBaseImpl] Enter: doHandleRequest
            09:47:58,246 DEBUG [HandlerChainBaseImpl] Exit: doHandleRequest with status: true
            09:47:58,254 DEBUG [HandlerChainBaseImpl] Enter: handleResponse
            09:47:58,254 DEBUG [HandlerChainBaseImpl] Exit: handleResponse with status: true
            09:47:58,330 ERROR [Call] Exception:
            java.lang.NumberFormatException: empty String
            at org.jboss.axis.encoding.ser.SimpleDeserializer.onEndElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(SimpleDeserializer.java:242)
            at org.jboss.axis.encoding.DeserializerImpl.endElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(DeserializerImpl.java:582)
            at org.jboss.axis.encoding.DeserializationContextImpl.endElement(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)V(DeserializationContextImpl.java:1249)
            at org.jboss.axis.message.SAX2EventRecorder.replay(IILorg.xml.sax.ContentHandler;)V(SAX2EventRecorder.java:252)
            at org.jboss.axis.message.SOAPElementAxisImpl.publishToHandler(Lorg.xml.sax.ContentHandler;)V(SOAPElementAxisImpl.java:1389)
            at org.jboss.axis.message.RPCElement.deserialize()V(RPCElement.java:262)
            at org.jboss.axis.message.RPCElement.getParams()Ljava.util.Vector;(RPCElement.java:396)
            ...


            jbossWS can process this correctly.no problem.


            • 3. Re: jbossws4ee call gsoap's webservice problem
              peixubin peixubin Newbie

              1.

              
              ns__getGsb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
              ns__getSb(char *dwdm,struct ns__csbArray *_input,struct ns__csbArray * _return) ;
              
              


              I replace "_return" with result, "_input" with input, the testcase runs successly!!! why?

              2.
              but when the jbossws4ee client processes null number value,jboss reported error:
              09:47:58,246 DEBUG [HandlerChainBaseImpl] init: [config=null]
              09:47:58,246 DEBUG [HandlerChainBaseImpl] Enter: doHandleRequest
              09:47:58,246 DEBUG [HandlerChainBaseImpl] Exit: doHandleRequest with status: true
              09:47:58,254 DEBUG [HandlerChainBaseImpl] Enter: handleResponse
              09:47:58,254 DEBUG [HandlerChainBaseImpl] Exit: handleResponse with status: true
              09:47:58,330 ERROR [Call] Exception:
              java.lang.NumberFormatException: empty String
              at org.jboss.axis.encoding.ser.SimpleDeserializer.onEndElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(SimpleDeserializer.java:242)
              at org.jboss.axis.encoding.DeserializerImpl.endElement(Ljava.lang.String;Ljava.lang.String;Lorg.jboss.axis.encoding.DeserializationContext;)V(DeserializerImpl.java:582)
              at org.jboss.axis.encoding.DeserializationContextImpl.endElement(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)V(DeserializationContextImpl.java:1249)
              at org.jboss.axis.message.SAX2EventRecorder.replay(IILorg.xml.sax.ContentHandler;)V(SAX2EventRecorder.java:252)
              at org.jboss.axis.message.SOAPElementAxisImpl.publishToHandler(Lorg.xml.sax.ContentHandler;)V(SOAPElementAxisImpl.java:1389)
              at org.jboss.axis.message.RPCElement.deserialize()V(RPCElement.java:262)
              at org.jboss.axis.message.RPCElement.getParams()Ljava.util.Vector;(RPCElement.java:396)
              ...
              jbossWS can process null number correctly.no problem.