Retornando matrizes de serviço web .net com os resultados de serviços web Java ME em erro de compilação de rascunho?

votos
1

Então, eu estou recebendo alguns erros de compilação no netbeans 6.5 gerado o código de serviço web para um java ME cliente para ac # (vs2005) serviço web. Eu aparadas meu exemplo significativamente, e ainda mostra o problema, e não ser capaz de retornar uma coleção de coisas é muito bonito um deal-breaker.

c serviço # 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 (gerado automaticamente por 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>

Gerado (netbeans), código que não compilar, este foi criada passar pelo Adicionar -> New JavaME para Web Services Client assistente. (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]);
    }

verifica-se com este exemplo artificial (o CustomType no meu problema de produção tem mais de um campo) Eu também recebo erros deste código diversão na mesma gerado (SimpleWebService_Stub.java) gerado código. Os erros são de que cadeia não é definido (é de Cordas em java, e além disso, eu acho que isso deve estar falando sobre CustomType de qualquer maneira).

private static string string_fromObject( Object obj[] ) {
    if(obj == null) return null;
    string result = new string();
    return result;
}
Publicado 16/01/2009 em 19:38
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Claramente você não deve estar usando fantasia coisas embutidas como gerador de stub das netbeans. Nãos, você deve estar usando o Sol (ou Sprint marca ...) gerador de stub que você pode começar a por:

  1. Botão direito do mouse seu projeto
  2. selecione Propriedades
  3. Selecionar plataforma no lado esquerdo da nova caixa de diálogo
  4. Clique em Gerenciar Emuladores no lado rigt
  5. Selecione o emulador de sua escolha ( Sun Java (TM) Wirless Tookit 2.5 para CLDC ) no lado esquerdo deste novo diálogo
  6. Clique no Ferramentas e Extensões guia.
  7. Clique no Abrir Utilities botão.
  8. Selecione o Generator Stub Utility neste novo diálogo
  9. Chorar sobre o grande número de passos e diálogos envolvidos.
  10. Clique Lançamento
  11. Especifique o seu WSDL Url http:? //localhost/SimpleWebService/SimpleWebService.asmx WSDL
  12. Especifique seu caminho ouput ** C: \ code \ SimpleMobile \ src \ **
  13. Especifique o seu pacote de saída simplewebservice ou o que você
  14. Pressionar o OK botão.
  15. Ignorar os erros sobre ser incapaz de compilar se você estiver indo para compilar com netbeans. erro: com.sun.tools.javac.Main não é availble no classpath .. erro: comilation falhou, deveria ter sido relatado erros
  16. Repita todos os itens acima qualquer momento as mudanças de serviços web, e os tocos precisam ser regenerados.
  17. Escrever um arquivo de lote para fazer isso para salvar sua sanidade.

ugh. Bem de qualquer maneira, o acima eu encontrei no livro de Jonathan Knudsen "pancadaria com MIDP e MSA: criar grandes aplicações móveis"

Respondeu 16/01/2009 em 20:12
fonte usuário

votos
1

A resposta anterior é grande, eu tinha ClassCastException quando eu usei o netbeans gerados classe stub, Java ME plataforma SDK 3 classe gerada funciona como um encanto.

Java ME plataforma SDK 3 e netbeans 6.8 não mostra o botão utilitários aberta (não pode clicar nele), mas você pode abrir Java ME plataforma SDK 3 para gerar a classe de stub

criar um novo projeto, clique direito sobre o nome do projeto: adicionar - outra escolha outro cliente do serviço, mobile web, especificar URL WSDL e woila, você tem as classes geradas de trabalho.

Respondeu 21/03/2010 em 22:07
fonte usuário

votos
0

no serviço web adicionar atributo [Serializable] para CustomType classe. o que você vai ter ArrayOfCustomType_fromObject () na classe topo.

Respondeu 31/03/2010 em 12:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more