Pessoal.
To montando uma aplicação mobile que consumirá um webservice feito em delphi.
Estou utilizando as classes do projeto ksoap http://ksoap.objectweb.org/software/downloads/current/ksoap-source.zip
e do kxml http://kxml.objectweb.org/software/downloads/current/kxml-source.zip.
public void ConsomeWebService()
{
StringBuffer stringbuffer = new StringBuffer();
String url = "http://ip/webservice/bdpwebservice.dll";
SoapObject client = new SoapObject(url, "INCLUIR");
client.addProperty("xpto", new String("xpto"));
HttpTransport ht = new HttpTransport(url, "INCLUIR");
try
{
stringbuffer.append("Resultado foi:" + ht.call(client));
System.out.println(stringbuffer.toString());
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
E ao executar apresenta o seguinte erro:
org.kxml.io.ParseException: unexpected: StartTag <html> line: -1 attr: null @-1:-1
at org.kxml.parser.AbstractXmlParser.read(AbstractXmlParser.java:105)
at org.ksoap.SoapEnvelope.parseHead(SoapEnvelope.java:82)
at org.ksoap.SoapEnvelope.parse(SoapEnvelope.java:74)
at org.ksoap.transport.HttpTransport.call(HttpTransport.java:246)
at org.ksoap.transport.HttpTransport.call(HttpTransport.java:266)
Alguém pode me dar um sugestão para solucionar? Ou Alternativas?
Valewzz…
A mensagem é auto-explicativa: Que p@%%( de “” tá fazendo na resposta de um webservice ?
Presumo que ele tá aparecendo na resposta devido a erro durante a geração da mesma, por parte do seu webservice em delphi (afff !!!) ou devido a problema na infraestrutura sua que derepente tá bloqueando o acesso ao webservice (proxy gerando mensagem de erro, por exemplo).
Acredito que o a url do wsdl estava errada Boone.
O correto seria http://ip/webservicedes/bdpwebservice.dll/wsdl/IdmSQL.
Sendo assim me retorna conforme uma parte que coloquei abaixo:
<definitions name="IdmSQLservice" targetNamespace="http://tempuri.org/">
<types>
<xs:schema targetNamespace="http://www.borland.com/namespaces/Types">
<xs:complexType name="TStringDynArray">
<xs:complexContent>
<xs:restriction base="soapenc:Array">
<xs:sequence/>
<xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:string[]"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
</types>
<message name="INCLUIR1Request">
<part name="TABELA" type="xs:string"/>
<part name="CAMPOS" type="xs:string"/>
<part name="VALORES" type="xs:string"/>
<part name="CODIGO" type="xs:string"/>
<part name="USUARIO" type="xs:string"/>
<part name="DATA" type="xs:string"/>
</message>
Porém continua dando a exceção:
org.kxml.io.ParseException: unexpected: StartTag <definitions> line: -1 attr: [name="IdmSQLservice", targetNamespace="http://tempuri.org/"] @-1:-1
at org.kxml.parser.AbstractXmlParser.read(AbstractXmlParser.java:105)
at org.ksoap.SoapEnvelope.parseHead(SoapEnvelope.java:82)
at org.ksoap.SoapEnvelope.parse(SoapEnvelope.java:74)
at org.ksoap.transport.HttpTransport.call(HttpTransport.java:246)
at org.ksoap.transport.HttpTransport.call(HttpTransport.java:266)
at TestaWebService.run(TestaWebService.java:38)
Tentei criar através do Wizard do Netbeans: Botão direito no projeto > Novo > Cliente de Serviço Web Java ME e quando ele tentar importar o wsdl acusa a mensagem de que o WSDL não é compatível com a especificação de serviços web Java ME JSR-172.
Por acaso o wsdl que o webservice no delphi está gerando é incompátivel com o ksoap?
Valews.
A forma abaixo funcionou perfeitamente:
No exemplo abaixo estou enviando dados para uma tabela dbo.Acessorios e o webservice me retorna o id do registro gravado na tabela.
SoapObject client = new SoapObject("http://tempuri.org","INCLUIR");
client.addProperty("xpto", new String("dbo.Acessorios"));
client.addProperty("CAMPOS", new String("Descri"));
client.addProperty("VALORES", new String("'" + "TESTE 3" + "'"));
client.addProperty("CODIGO", new String("dbo.Acessorios.CodAcessorio"));
client.addProperty("USUARIO", new String("Carlos Maciel"));
client.addProperty("DATA", new String("17/6/2009 11:38:00"));
HttpTransport ht = new HttpTransport();
ht.setUrl("http://192.168.0.4:1080/webservice/bdpwebservice.dll/soap/idmsql");
ht.setSoapAction("urn:dmProjeto-IdmSQL#INCLUIR");
ht.debug = true;
try
{
System.out.println("O retorno foi: "+ht.call(client).toString());
}
catch (org.ksoap.SoapFault ex)
{
System.out.println("FaultString: " + ex.faultstring);
}
catch (IOException ex)
{
ex.printStackTrace();
}
Valew …