【问题标题】:Call RPC/Literal WSDL file from Android从 Android 调用 RPC/Literal WSDL 文件
【发布时间】:2014-04-10 09:56:52
【问题描述】:

我想在android中调用this WSDL file来检索数据。

这是 RPC/Literal WSDL 结构,但我无法解析它。我已经解析了基于 SOAP 的普通 WSDL 文件。

请帮我解决这个问题。

代码:

    import java.io.StringReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class WebServiceRecetrioActivity extends Activity 
{  
    Button btnReg;
    EditText fullName,emailId,password,confirmPwd;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registration_main);

        btnReg = (Button)findViewById(R.id.regId);
        fullName = (EditText)findViewById(R.id.name);
        emailId = (EditText)findViewById(R.id.emailId);
        password = (EditText)findViewById(R.id.pwd);
        confirmPwd = (EditText)findViewById(R.id.pwd1);

        btnReg.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                String xmlString = "http://www.danica.com.ar/recetario/recetario.wsdl"; //Added your wsdl as an xml string here

                try {
                     XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
                     XmlPullParser pullParser = parserFactory.newPullParser();
                     pullParser.setInput(new StringReader(xmlString));

                     int eventType = pullParser.getEventType();
                     while (true) 
                     {
                        if(eventType == XmlPullParser.START_TAG) 
                        {
                           String Tag = pullParser.getName();
                           System.out.println(Tag);

                        } 

                        else if(eventType == XmlPullParser.END_DOCUMENT)
                                break;
                        eventType = pullParser.next();
                     }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });


    }
}

例外情况:

03-07 16:39:52.297: W/System.err(767): org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT http://www.danic...@1:50 in java.io.StringReader@41223d10) 
03-07 16:39:52.297: W/System.err(767):  at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
03-07 16:39:52.297: W/System.err(767):  at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
03-07 16:39:52.297: W/System.err(767):  at com.webservice.WebServiceRecetrioActivity$1.onClick(WebServiceRecetrioActivity.java:62)
03-07 16:39:52.297: W/System.err(767):  at android.view.View.performClick(View.java:4084)
03-07 16:39:52.297: W/System.err(767):  at android.view.View$PerformClick.run(View.java:16966)
03-07 16:39:52.297: W/System.err(767):  at android.os.Handler.handleCallback(Handler.java:615)
03-07 16:39:52.297: W/System.err(767):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 16:39:52.307: W/System.err(767):  at android.os.Looper.loop(Looper.java:137)
03-07 16:39:52.307: W/System.err(767):  at android.app.ActivityThread.main(ActivityThread.java:4745)
03-07 16:39:52.317: W/System.err(767):  at java.lang.reflect.Method.invokeNative(Native Method)
03-07 16:39:52.317: W/System.err(767):  at java.lang.reflect.Method.invoke(Method.java:511)
03-07 16:39:52.327: W/System.err(767):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-07 16:39:52.327: W/System.err(767):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-07 16:39:52.327: W/System.err(767):  at dalvik.system.NativeStart.main(Native Method)

我用过ksoap2-android-assembly-3.1.1-jar-with-dependencies.jar

【问题讨论】:

    标签: android wsdl rpc


    【解决方案1】:

    使用ksoapxml 库。它有你可以使用的 xml pull 解析器。

    String xmlString = ""; //Added your wsdl as an xml string here
    
    try {
                XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
                XmlPullParser pullParser = parserFactory.newPullParser();
                pullParser.setInput(new StringReader(xmlString));
    
                int eventType = pullParser.getEventType();
    
    
    
    
                   while (true) 
                   {
                       if(eventType == XmlPullParser.START_TAG) 
                       {
                           String Tag = pullParser.getName();
    
                           System.out.println(Tag);
    
                       } 
    
                       else if(eventType == XmlPullParser.END_DOCUMENT)
                           break;
                       eventType = pullParser.next();
                   }
    

    输出如下:

    definitions
    types
    schema
    complexType
    all
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    complexType
    all
    element
    element
    element
    element
    element
    complexType
    sequence
    element
    complexType
    sequence
    element
    complexType
    all
    element
    element
    element
    element
    element
    element
    complexType
    sequence
    element
    complexType
    all
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    element
    complexType
    sequence
    element
    complexType
    all
    element
    element
    element
    element
    element
    element
    message
    part
    message
    part
    message
    part
    part
    message
    part
    message
    part
    part
    message
    part
    part
    part
    message
    part
    message
    part
    message
    part
    message
    part
    message
    part
    message
    part
    message
    part
    part
    message
    part
    portType
    operation
    input
    output
    operation
    input
    output
    operation
    input
    output
    operation
    input
    output
    operation
    input
    output
    operation
    input
    output
    operation
    input
    output
    binding
    soap:binding
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    operation
    soap:operation
    input
    soap:body
    output
    soap:body
    service
    documentation
    port
    soap:address
    
    HttpClient httpCLient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(serverUrl);
    HttpResponse httpresponse = httpClient.execute(httpGet);
    HttpEntity resEntity = httpresponse.getEntity();
    String result = EntityUtils.toString(resEntity);
    

    将结果传递给您的解析器。

    获取每个标签的所有属性和值的列表

    int count = pullParser.getAttributeCount();
    for(int i=0;i<count;i++)
    {
    Log.d("App", pullParser.getAttributeName(i) + ":" + pullParser.getAttributeValue(i));
    }
    

    【讨论】:

    • 感谢您的回答,我知道这个库。这是 RPC/Literal Web 服务。您能否提供有关此的代码。
    • 使用这个代码我可以解析来自这个 WSDL 的数据吗?我会为您的回答 +1,如果您的回答符合我的要求,那么我会接受您的回答。
    • 我用过 ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar 这个。这是做这件事还是做其他事情的正确选择?如果还有其他问题,请提供合适的链接
    • 代码中的注释在此处添加您的 wsdl 字符串表示 wsdl 字符串而不是 url 返回的实际 xml。
    • 您需要遍历属性并获取它们的值。我建议看一下 xmlpullparser 的一些示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多