2013-01-07 2 views
1

http://www.apniurdu.com/Soap.html 웹 서비스가 Android에서 실행되도록하려고합니다.SOAP Android pullparser 예외가 예상 됨 문자열이

private static final String cMETHOD_NAME = "Translate"; 
private static final String cSOAP_ACTION = "http://apniurdu.com/SOAP/Urdu2.wsdl/Translate&quot"; 
private static final String cNAMESPACE = "http://apniurdu.com/SOAP/Urdu2.wsdl"; 
private static final String cURL = "http://apniurdu.com/SOAP/SOAP.pl"; 


public SoapObject Translatesoap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException { 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); //set up request 
     java.lang.String symbol="hello world, good morning"; 
     request.addProperty("symbol", symbol); //variable name, value. I got the variable name, from the wsdl file! 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //put all required data into a soap envelope 
     envelope.setOutputSoapObject(request); //prepare request 
     AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL); 
     httpTransport.debug = true; //this is optional, use it if you don't want to use a packet sniffer to check what the sent message was (httpTransport.requestDump) 
     httpTransport.call(SOAP_ACTION, envelope); //send request 
     SoapObject result=(SoapObject)envelope.getResponse(); //get response 
     return result; 
    } 

    try { 
         SoapObject result=Translatesoap(cMETHOD_NAME, cSOAP_ACTION, cNAMESPACE, cURL); 
       //  Log.v("ergebnis", result.getProperty(1).toString()); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (XmlPullParserException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        Log.v("next", "try"); 

이것은 기본적으로 내 코드입니다. 첫 번째 변수; 두 번째 절차, 세 번째 절차의 호출. 내가 XMLpullparser 예외를 얻고 실행 : 짧은

01-07 12:06:32.858: W/System.err(969): org.xmlpull.v1.XmlPullParserException: Expected a quoted string (position:DOCDECL @1:50 in [email protected]) 
01-07 12:06:32.858: W/System.err(969): at org.kxml2.io.KXmlParser.readQuotedId(KXmlParser.java:664) 
01-07 12:06:32.868: W/System.err(969): at org.kxml2.io.KXmlParser.readExternalId(KXmlParser.java:643) 
01-07 12:06:32.868: W/System.err(969): at org.kxml2.io.KXmlParser.readDoctype(KXmlParser.java:585) 
01-07 12:06:32.868: W/System.err(969): at org.kxml2.io.KXmlParser.next(KXmlParser.java:418) 
01-07 12:06:32.868: W/System.err(969): at org.kxml2.io.KXmlParser.next(KXmlParser.java:310) 
01-07 12:06:32.868: W/System.err(969): at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:2029) 
01-07 12:06:32.878: W/System.err(969): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126) 
01-07 12:06:32.878: W/System.err(969): at org.ksoap2.transport.Transport.parseResponse(Transport.java:63) 
01-07 12:06:32.878: W/System.err(969): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100) 
01-07 12:06:32.878: W/System.err(969): at com.example.c_f_converter_ksoap2.ManuelleSOAP.Translatesoap(ManuelleSOAP.java:64) 
01-07 12:06:32.889: W/System.err(969): at com.example.c_f_converter_ksoap2.ManuelleSOAP$2.onClick(ManuelleSOAP.java:102) 
01-07 12:06:32.889: W/System.err(969): at android.view.View.performClick(View.java:3511) 
01-07 12:06:32.898: W/System.err(969): at android.view.View$PerformClick.run(View.java:14105) 
01-07 12:06:32.898: W/System.err(969): at android.os.Handler.handleCallback(Handler.java:605) 
01-07 12:06:32.898: W/System.err(969): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-07 12:06:32.898: W/System.err(969): at android.os.Looper.loop(Looper.java:137) 
01-07 12:06:32.908: W/System.err(969): at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-07 12:06:32.908: W/System.err(969): at java.lang.reflect.Method.invokeNative(Native Method) 
01-07 12:06:32.918: W/System.err(969): at java.lang.reflect.Method.invoke(Method.java:511) 
01-07 12:06:32.927: W/System.err(969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-07 12:06:32.927: W/System.err(969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-07 12:06:32.927: W/System.err(969): at dalvik.system.NativeStart.main(Native Method) 
01-07 12:06:32.927: V/next(969): try 

을 : 예상 구문 분석 응답에서 인용 된 문자열 - 내가 아는 한. 그 단서를 해결하는 데 도움이되는 단서가 있습니까? 미리 많은 감사드립니다!

업데이트 : 는 내가 .. 잘못된 URL을 사용 지금은 WSDL의 URL "http://apniurdu.com/SOAP/Urdu2.wsdl"로 URL을 변경하고 오류가 생각 "예기치 않은 시작 토큰"

01-07 13:09:23.527: W/System.err(1149): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='UrduSOAP' targetNamespace='http://apniurdu.com/SOAP/Urdu2.wsdl'>@10:43 in [email protected]) 

그래서 wsdl은 ksoap2와 호환되지 않습니까? 아니면 내가 잘못하고있는거야?

private static final String cSOAP_ACTION = "http://apniurdu.com/SOAP/Urdu2.wsdl/Translate"; 

편집

그것은 아니다 : 감사

답변

0

나는 아마도 당신이 작성해야 있도록 & quot를 제거해야 문제가이 라인

private static final String cSOAP_ACTION = "http://apniurdu.com/SOAP/Urdu2.wsdl/Translate&quot"; 

생각 질문에 대해서는,하지만 OP에 대해서는 ksoap2를 시작하는 데 약간의 도움이됩니다.

public SoapObject testMethod(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL, String parameter) throws IOException, XmlPullParserException 
    { 
     List<HeaderProperty> headers = new ArrayList<HeaderProperty>(); 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("variablename", parameter); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     //envelope.dotNet = true; for .net services 
     envelope.setOutputSoapObject(request); 

     HttpTransportSE httpTransport = new HttpTransportSE(URL); 

     httpTransport.call(SOAP_ACTION, envelope, headers); 

     return (SoapObject) envelope.getResponse(); 
    } 

따라서 ksoap2와 문자열 매개 변수를 사용하는 기본 호출입니다.

+0

이것은 작동하지 않았지만 나중에 인용문을 추가하고 제거하는 것을 잊었습니다. 그러나 이제는 다른 오류가 발생합니다. 업데이트 된 게시물을 참조하십시오. – user1497119

+0

wsdl을보고 아마도 아이디어가 있습니다. 'private static final String cSOAP_ACTION = "http://apniurdu.com/SOAP/Urdu2.wsdl#Translate";'를 사용하십시오. '/'문자를 '#'으로 변경했습니다. 이것을 시도하십시오. –

+0

안녕, 나도 그걸 시도했지만 성공하지 못했습니다. 이제 다른 stackoverflow 게시물에 "wsdl 아니라 PHP 파일을 가리켜 야한다"그래서 나는 정말로 "AndroidHttpTransport httpTransport = new AndroidHttpTransport (URL);"URL이 wsdl 또는를 가리켜 야하는지 궁금합니다. "soap : address location ="http://apniurdu.com/SOAP/SOAP.pl ""서비스 위치 – user1497119