Donc, je reçois des erreurs de compilation sur le code de service Web généré par netbeans 6.5 pour un client ME Java sur un service web C# (vs2005). J'ai réduit mon exemple de manière significative, et il montre toujours le problème, et ne pas être en mesure de retourner une collection de choses est à peu près un deal-breaker.Retour tableaux à partir du service Web .net au service Web Java ME entraîne l'erreur de compilation de stub?
C# service web (SimpleWebService.asmx)
<%@ WebService Language="C#" Class="SimpleWebService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://sphereinabox.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class SimpleWebService : System.Web.Services.WebService {
[WebMethod]
public CustomType[] GetSomething() {
return new CustomType[] {new CustomType("hi"), new CustomType("bye")};
}
public class CustomType {
public string Name;
public CustomType(string _name) {
Name = _name;
}
public CustomType() {
}
}
}
WSDL (automatiquement généré par VS2005):
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://sphereinabox.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://sphereinabox.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://sphereinabox.com/">
<s:element name="GetSomething">
<s:complexType />
</s:element>
<s:element name="GetSomethingResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetSomethingResult" type="tns:ArrayOfCustomType" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ArrayOfCustomType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="CustomType" nillable="true" type="tns:CustomType" />
</s:sequence>
</s:complexType>
<s:complexType name="CustomType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
</s:sequence>
</s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="GetSomethingSoapIn">
<wsdl:part name="parameters" element="tns:GetSomething" />
</wsdl:message>
<wsdl:message name="GetSomethingSoapOut">
<wsdl:part name="parameters" element="tns:GetSomethingResponse" />
</wsdl:message>
<wsdl:portType name="SimpleWebServiceSoap">
<wsdl:operation name="GetSomething">
<wsdl:input message="tns:GetSomethingSoapIn" />
<wsdl:output message="tns:GetSomethingSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SimpleWebServiceSoap" type="tns:SimpleWebServiceSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetSomething">
<soap:operation soapAction="http://sphereinabox.com/GetSomething" 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="SimpleWebServiceSoap12" type="tns:SimpleWebServiceSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="GetSomething">
<soap12:operation soapAction="http://sphereinabox.com/GetSomething" 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="SimpleWebService">
<wsdl:port name="SimpleWebServiceSoap" binding="tns:SimpleWebServiceSoap">
<soap:address location="http://localhost/SimpleWebService/SimpleWebService.asmx" />
</wsdl:port>
<wsdl:port name="SimpleWebServiceSoap12" binding="tns:SimpleWebServiceSoap12">
<soap12:address location="http://localhost/SimpleWebService/SimpleWebService.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
généré (NetBeans) code qui ne parvient pas à compiler, cela a été créé en passant par la "Ajouter -> Nouvel assistant JavaME to Web Services". (SimpleWebService_Stub.java)
public ArrayOfCustomType GetSomething() throws java.rmi.RemoteException {
Object inputObject[] = new Object[] {
};
Operation op = Operation.newInstance(_qname_operation_GetSomething, _type_GetSomething, _type_GetSomethingResponse);
_prepOperation(op);
op.setProperty(Operation.SOAPACTION_URI_PROPERTY, "http://sphereinabox.com/GetSomething");
Object resultObj;
try {
resultObj = op.invoke(inputObject);
} catch(JAXRPCException e) {
Throwable cause = e.getLinkedCause();
if(cause instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException) cause;
}
throw e;
}
//////// Error on next line, symbol ArrayOfCustomType_fromObject not defined
return ArrayOfCustomType_fromObject((Object[])((Object[]) resultObj)[0]);
}
il se trouve avec cet exemple artificiel (le « CustomType » dans mon problème de production a plus d'un champ) Je reçois aussi des erreurs de ce code amusant dans le même produit (SimpleWebService_Stub.java) code généré. Les erreurs sont que la chaîne n'est pas définie (c'est la chaîne dans java, et d'ailleurs je pense que cela devrait parler de CustomType de toute façon).
private static string string_fromObject(Object obj[]) {
if(obj == null) return null;
string result = new string();
return result;
}