Announcement Announcement Module
Collapse
No announcement yet.
Send jagged array from JAVA to .NET webservice Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Send jagged array from JAVA to .NET webservice

    I am trying to call a method in a web service made in .NET from JAVA. I am using AXIS 1.4 and Spring, my main target was send a hashtable from JAVA to .NET, because .NET doesn´t allow that i have to implement a “jagged array”. I made an application in .NET which send this “jagged array” and it worked perfect but when i try to send from a JAVA appilcation is imposible, i get an empty array “key = {Dimensions:[0]}”.



    WDSL file:


    HTML Code:
      <?xml version="1.0" encoding="utf-8" ?> 
    
    - <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    
    - <wsdl:types>
    
    - <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
    
    - <s:element name="sendEmail">
    
    - <s:complexType>
    
    - <s:sequence>
    
      <s:element minOccurs="0" maxOccurs="1" name="idNotificacion" type="s:string" /> 
    
      <s:element minOccurs="1" maxOccurs="1" name="idUsuario" type="s:int" /> 
    
      <s:element minOccurs="1" maxOccurs="1" name="idPais" type="s:int" /> 
    
      <s:element minOccurs="0" maxOccurs="1" name="key" type="tns:ArrayOfArrayOfString" /> 
    
      </s:sequence>
    
      </s:complexType>
    
      </s:element>
    
    - <s:complexType name="ArrayOfArrayOfString">
    
    - <s:sequence>
    
      <s:element minOccurs="0" maxOccurs="unbounded" name="ArrayOfString" nillable="true" type="tns:ArrayOfString" /> 
    
      </s:sequence>
    
      </s:complexType>
    
    - <s:complexType name="ArrayOfString">
    
    - <s:sequence>
    
      <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" /> 
    
      </s:sequence>
    
      </s:complexType>
    
    - <s:element name="sendEmailResponse">
    
      <s:complexType /> 
    
      </s:element>
    
      </s:schema>
    
      </wsdl:types>
    
    - <wsdl:message name="sendEmailSoapIn">
    
      <wsdl:part name="parameters" element="tns:sendEmail" /> 
    
      </wsdl:message>
    
    - <wsdl:message name="sendEmailSoapOut">
    
      <wsdl:part name="parameters" element="tns:sendEmailResponse" /> 
    
      </wsdl:message>
    
    - <wsdl:portType name="ServiceSoap">
    
    - <wsdl:operation name="sendEmail">
    
      <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Transporta los datos requeridos desde G2 a G1 para el envío de emails</wsdl:documentation> 
    
      <wsdl:input message="tns:sendEmailSoapIn" /> 
    
      <wsdl:output message="tns:sendEmailSoapOut" /> 
    
      </wsdl:operation>
    
      </wsdl:portType>
    
    - <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
    
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    
    - <wsdl:operation name="sendEmail">
    
      <soap:operation soapAction="http://tempuri.org/sendEmail" 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="ServiceSoap12" type="tns:ServiceSoap">
    
      <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    
    - <wsdl:operation name="sendEmail">
    
      <soap12:operation soapAction="http://tempuri.org/sendEmail" style="document" /> 
    
    - <wsdl:input>
    
      <soap12:body use="literal" /> 
    
      </wsdl:input>
    
    - <wsdl:output>
    
      <soap12:body use="literal" /> 
    
      </wsdl:output>
    
      </wsdl:operation>
    
      </wsdl:binding>
    
    - <wsdl:service name="Service">
    
    - <wsdl:port name="ServiceSoap" binding="tns:ServiceSoap">
    
      <soap:address location="http://localhost:1487/WSSendEmail/Service.asmx" /> 
    
      </wsdl:port>
    
    - <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
    
      <soap12:address location="http://localhost:1487/WSSendEmail/Service.asmx" /> 
    
      </wsdl:port>
    
      </wsdl:service>
    
      </wsdl:definitions>

    Spring bean:

    HTML Code:
          <bean id="sendEmailWS" class="com.deremate.g2.email.spring.SendEmailRpcPortProxyFactoryBean">
    
                <property name="serviceInterface" value="com.deremate.g2.email.spring.SendEmailBridge" />
    
                <property name="wsdlDocumentUrl" value="http://localhost:1487/WSSendEmail/Service.asmx?WSDL" />
    
                <property name="namespaceUri" value="http://tempuri.org/" />
    
                <property name="serviceName" value="Service" />
    
                <property name="portName" value="ServiceSoap" />
    
          </bean>

    Implementation of the bean class

    Code:
    public class SendEmailRpcPortProxyFactoryBean extends JaxRpcPortProxyFactoryBean {
    
     
    
        protected void postProcessJaxRpcService(Service service) {
    
            TypeMappingRegistry registry = service.getTypeMappingRegistry();
    
            TypeMapping mapping = registry.createTypeMapping();
    
            registerBeanMapping(mapping, String[].class, "ArrayOfString");
    
            registerBeanMappingArray(mapping, String[][].class, "ArrayOfArrayOfString");
    
            registry.register("http://schemas.xmlsoap.org/soap/encoding/", mapping);
    
         }
    
     
    
         protected void registerBeanMapping(TypeMapping mapping, Class type, String name) {
    
            QName qName = new QName("http://tempuri.org/", name);
    
            mapping.register(type, qName,
    
                new BeanSerializerFactory(type, qName),
    
                new BeanDeserializerFactory(type, qName));
    
         }
    
     
    
        protected void registerBeanMappingArray(TypeMapping mapping, Class type, String name) {
    
            QName qName = new QName("http://tempuri.org/", name);
    
            mapping.register(type, qName,
    
                new ArraySerializerFactory(type, qName),
    
                new ArrayDeserializerFactory(qName));
    
        }
    
    }




    webservice (Client)


    Code:
    String[] dataMapKey[] = new String[1][];
    
          dataMapKey[0] = new String[2];
    
          dataMapKey[0][0] = "pepe";
    
          dataMapKey[0][1] = "pepito";
    
          
    
          SendEmailBridge service = (SendEmailBridge) ctx.getBean("sendEmailWS");
    
          service.sendEmail("Registro_Confirma_OK", 1000000, 27, dataMapKey);


    WebService in.NET (Server)

    Code:
    [WebMethod(Description = "Transporta los datos requeridos desde G2 a G1 para el envío de emails")]
    
        public void sendEmail(String idNotificacion, int idUsuario, int idPais, String[][] key)
    
        {
    
         //El valor de key que recibo es: {Dimensions:[0]}
    
        }
Working...
X