SOAP Android pullparser异常应为带引号的字符串

SOAP Android pullparser异常应为带引号的字符串,android,eclipse,soap,xmlpullparser,Android,Eclipse,Soap,Xmlpullparser,我正在尝试让这个web服务在Android上运行 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/SOA

我正在尝试让这个web服务在Android上运行

 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 java.io.InputStreamReader@412d9088) 
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并获取错误“意外启动令牌”

01-07 13:09:23.527:W/System.err(1149):org.xmlpull.v1.XmlPullParserException:应为:开始标签{http://schemas.xmlsoap.org/soap/envelope/}信封(位置:java.io中的START_TAG@10:43。InputStreamReader@412dbf58) 

那么wsdl是否与ksoap2不兼容?还是我做错了什么?谢谢

我想你的问题是这条线

private static final String cSOAP_ACTION = "http://apniurdu.com/SOAP/Urdu2.wsdl/Translate&quot";
也许你必须删除“”,所以你应该这样写:

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

这不是问题,而是为了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();
    }
public-SoapObject-testMethod(String-METHOD\u-NAME、String-SOAP\u-ACTION、String-NAMESPACE、String-URL、String-parameter)抛出IOException、XmlPullParserException
{
列表标题=新建ArrayList();
SoapObject请求=新的SoapObject(名称空间、方法名称);
addProperty(“variablename”,参数);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
//envelope.dotNet=true;适用于.net服务
envelope.setOutputSoapObject(请求);
HttpTransportSE httpTransport=新的HttpTransportSE(URL);
调用(SOAP_操作、信封、标题);
返回(SoapObject)信封。getResponse();
}

因此,这是一个使用ksoap2和字符串参数的基本调用。

这不起作用,我后来添加了"e并忘记删除它-但是,我现在遇到另一个错误,请参阅更新的帖子。我查看了wsdl,也许我有了一个想法。使用
private静态最终字符串cSOAP\u ACTION=”http://apniurdu.com/SOAP/Urdu2.wsdl#Translate";。我将“/”字符改为“#”。请试试这个。嗨,我也试过,但没有成功。现在我在另一篇stackoverflow文章中读到,URL“不应该指向wsdl,而是指向php文件”,所以我现在真的想知道“AndroidHttpTransport httpTransport=new AndroidHttpTransport(URL);”URL是否应该指向wsdl或“soap:address location=”“”服务位置可能该服务不起作用。如果你试图在浏览器中打开它,它会说:Internal Server error你可能是对的,我甚至不能在他们的网站上运行示例,Internal error。。
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();
    }