标签: android-ksoap2

如何使用kso​​ap2-android正确调用我的PHP Web服务?

到目前为止,我已经创建了一个PHP客户端和一个VB.NET客户端,它们都成功调用了我的PHP Web服务.为了让后者工作,我需要使用SourceForge中的SoapUI工具.它告诉我,我的wsdl不符合WS-I.我不需要Pro版本以交互方式测试我的服务,因为它允许您直接编辑soap请求.修复我的WSDL并让我的VB.Net客户端运行android仍然是一个问题.

我还附上了ksoap2-andriod的源代码,以便我可以在调试时逐步完成.它有一点帮助,但是没有包含源的捆绑依赖项,特别是"kxml2 v1.6".如果有人能指出我的源拉链或罐子,我会很感激.

这是我从Android客户端调用PHP Web服务时无法解决的错误.

  org.xmlpull.v1.XmlPullParserException: expected: START_TAG   {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='naturallyIrrationalsoapserver' targetNamespace='http://www.naturallyIrrational.com'>@10:42 in java.io.InputStreamReader@44dce560)
Run Code Online (Sandbox Code Playgroud)

它告诉我它无法解析WSDL\XML - poistion @ 10.42是开放定义标记的结尾.

我相信,作为现在符合WS-I的WSDL,问题是由Ksoap2解释的这个服务命名空间定义.这是我用来调用它的android客户端代码.

public class SoapClientActivity extends Activity {
      @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(R.id.myText);
        String soapResponse="";
        final String METHOD_NAME = "getArrval";
        final String SOAP_ACTION = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";
        final String NAMESPACE = "http://www.naturallyIrrational.com";
Run Code Online (Sandbox Code Playgroud)

*下一行不正确,应指向 http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php*

        final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.wsdl";

        if (InternetStatus.getInstance(this).isOnline(this)) {

            try{                            
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); …
Run Code Online (Sandbox Code Playgroud)

php android soap android-ksoap2

6
推荐指数
1
解决办法
2140
查看次数

重新调整complexType对象时,SoapObject Result将anyType {}作为值返回

我打电话在我的Android应用程序的网络服务和方法是getGramaNiladhariData(),我得到的结果作为SoapObject.

result = (SoapObject) envelope.bodyIn;  Log.d("WS", String.valueOf(result));
Run Code Online (Sandbox Code Playgroud)

这就是我得到的 String.valueOf(结果)

getGramaNiladhariDataResponse {getGramaNiladhariDataResult = anyType的{gnName = anyType的{}; 地址= anyType的{}; workingDays = anyType的{}; gnDivision = anyType的{}; contactNumber = anyType的{}; }; }

这里我调用的方法返回一个complexType对象,由5个属性组成.正如我在互联网上发现的那样,我无法获得soap对象作为返回complexType对象的webservice方法的结果.如果是这样,我应该如何获取值.

我想要解决的是为什么我得到anyType {},作为值,而不是实际值.任何帮助,将不胜感激

android android-ksoap2

6
推荐指数
1
解决办法
1万
查看次数

序列化要使用KSOAP2发送的int数组

我在尝试向.NET Web服务发送一个int数组时遇到问题,该服务需要在其中一个参数中使用数组.这至少是我从Web服务的API描述中理解的,它说:

<dataIndexIDs>
<int>int</int>
<int>int</int> </dataIndexIDs>
Run Code Online (Sandbox Code Playgroud)

所以当我发送一个如下所示的int时,我没有得到任何错误,我认为它工作正常.

request.addProperty("dataIndexIDs", 63);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试发送一组int时:

request.addProperty("dataIndexIDs", new int[] {63, 62}); // array of ints
Run Code Online (Sandbox Code Playgroud)

或者整数的ArrayList:

ArrayList<Integer> indexes = new ArrayList<Integer>();
    indexes.add(63);
    indexes.add(62);
    request.addProperty("dataIndexIDs", indexes); // ArrayList of Integers
Run Code Online (Sandbox Code Playgroud)

我被抛出"java.lang.RuntimeException:无法序列化"异常.有什么帮助吗?我究竟做错了什么?谢谢!

java android web-services ksoap2 android-ksoap2

5
推荐指数
3
解决办法
1万
查看次数

使用addMapping而不是ksoap2中的"i:type ="属性for android

我在ksoap2中使用envelope.addMapping函数,我需要让它生成没有i:type属性的项目.

这是我的代码生成的soap请求

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://www.w3.org/2003/05/soap-encoding" 
    xmlns:v="http://www.w3.org/2003/05/soap-envelope">
    <v:Header>
        <ApiKey xmlns="urn:example:data">APIKey</ApiKey>
    </v:Header>
    <v:Body>
        <CreateScan xmlns="urn:example:services" id="o0" c:root="1">
            <scan i:type="n3:" xmlns:n3="">
                <n4:BaseUrl i:type="d:string" xmlns:n5="urn:example:data">http://www.example.com</n5:BaseUrl>
                <n5:DisplayName i:type="d:string" xmlns:n7="urn:example:data">Example Scan</n7:DisplayName>
            </scan>
        </CreateScan>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

我需要这样<scan i:type="n3:scanItem" xmlns:n3="">生成它 <scan>

这是我的代码

package ksoap2.test;

import java.util.Hashtable;
import java.util.Vector;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportSE;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class ksoap2 extends Activity {
    /** Called when the activity …
Run Code Online (Sandbox Code Playgroud)

android soap web-services ksoap2 android-ksoap2

5
推荐指数
1
解决办法
9843
查看次数

如何在android中发送soap请求?

我是WSDL webservices的新手,使用KSoap2库在android中调用wsdl webservices.

这是我的soap请求转储

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:loy="http://loyalcard.com/LoyalCardWebService/">;
   <soapenv:Header/>
   <soapenv:Body>
      <loy:GetOffersByLocation>
         <!--Optional:-->
         <loy:Location>
            <!--Optional:-->
            <loy:Latitude>?</loy:Latitude>
            <!--Optional:-->
            <loy:Longitude>?</loy:Longitude>
         </loy:Location>
      </loy:GetOffersByLocation>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我正在传递这个SopaObject,如:

 PropertyInfo latitude = new PropertyInfo();
        latitude.name="Latitude";
        latitude.type=Double.class;
        latitude.setValue(32.806673);

   PropertyInfo longitude = new PropertyInfo();
        longitude.name="Longitude";
        longitude.type=Double.class;
        longitude.setValue(-86.791133);

        SoapObject results = null;
        String methodName = "OffersByLocation";
        String actionName = "http://loyalcard.com/LoyalCardWebService/GetOffersByLocation";
        SoapObject request = new SoapObject(NAMESPACE,methodName);

        request.addProperty(latitude);
        request.addProperty(longitude);
Run Code Online (Sandbox Code Playgroud)

这里将纬度和经度值直接传递给OffersByLocation,我应该通过元素Location.请任何人都可以帮助如何通过位置传递参数.

我已尝试过以上程序,但我得到错误说

06-17 11:52:55.934: WARN/System.err(350): SoapFault - faultcode: 'soapenv:Server' faultstring: 'org.apache.axis2.databinding.ADBException: Unexpected subelement Latitude' faultactor: 'null' detail: org.kxml2.kdom.Node@44f6ddc0
Run Code Online (Sandbox Code Playgroud)

请任何人告诉我如何在Soap对象中传递上面的SOAP Request转储?

此致,Srinivas

android android-ksoap2

5
推荐指数
1
解决办法
1万
查看次数

无法解析导入org.ksoap2.transport.HttpTransportSE

我从这个链接下载了ksoap2 :

将下载的.jar文件导入Eclipse中的Android项目后,我只得到第一个导入行(HttpTransportSE)的导入错误.我搜索了但没有其他人有/发布过这个问题.怎么会这样?谢谢!

import org.ksoap2.transport.HttpTransportSE; //ERROR:The import org.ksoap2.transport.HttpTransportSE cannot be resolved
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;   
Run Code Online (Sandbox Code Playgroud)

eclipse android ksoap2 android-ksoap2

5
推荐指数
1
解决办法
1万
查看次数

Ksoap2无法在Android 2.2上序列化异常(使用用户定义的对象)

我知道这个问题有很多帖子.但是它们是在Android 3.0或更高版本上构建的(使用AsyncTask).我找不到我的解决方案.从Web服务获取信息存在问题.这是我的代码:

package com.example.marport;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;

public class Ithalatfaturalama extends Activity implements OnClickListener {

    EditText KonteynerNo;
    DatePicker DatePicker;
    Button Sorgula;
    TextView TextResult;
    List<String> toBeSentList;
    Iterator<String> it;
    Date toBeSentDate;
    SoapObject request;
    SoapSerializationEnvelope envelope;
    HttpTransportSE aps;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO …
Run Code Online (Sandbox Code Playgroud)

java android runtime-error user-defined-types android-ksoap2

5
推荐指数
1
解决办法
1616
查看次数

从WSDL中查找SOAPAction

我的要求是从Android调用Web服务并以一种很好的方式显示结果.

但是在Web服务的WSDL中我找不到SOAPAction.WSDL看起来像这样:

<operation name="getStudentList">
 <soap:operation soapAction=""/>
 <input>
   <soap:body use="literal"/>
 </input>
 <output>
   <soap:body use="literal"/>
  </output>
</operation>
Run Code Online (Sandbox Code Playgroud)

有没有办法SOAPAction在WSDL中找到其他一些地方?我可以调用Web服务并在没有的情况下获得结果SOAPAction吗?

android soap wsdl web-services android-ksoap2

5
推荐指数
1
解决办法
7637
查看次数

可能是肥皂故障的原因(faultcode:soapenv:Client,faultstring:Bad Request)

我正在编写一个客户端,使用kso​​ap2在Android中使用SOAP Web服务.我收到了SOAP FAULT异常.以下是LogCat的摘录.

<soapenv:Body><soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode><faultstring>Bad request</faultstring></soapenv:Fault></soapenv:Body></soapenv:Envelope>
04-06 09:04:09.693: E/SearchPublications(1159): SoapFault - faultcode: 'soapenv:Client' faultstring: 'Bad request' faultactor: 'null' detail: null
Run Code Online (Sandbox Code Playgroud)

这就是我从WSDL中提取最终字符串的值的方法:

  • Namespace:该属性的值namespacexsd:import 元件,这是的子元素xsd:schema,其是的子元素types
  • SoapAction:名称空间附加方法的名称
  • MethodName:API中方法的名称
  • URL:WSDL的实际URL

(参考:这个答案和它中提到的链接.)

我知道我的代码有问题,但是有人可以说可能导致它的原因以及我是否正确设置了所提到的最终变量的值?

我试图通过设置dotnet标志作为truefalse为好.我试图获得响应,SoapObject因为它是一个XML文档,我在一篇文章中读到,如果结果是XML,请使用SoapObject.

我也尝试调试它,并且所有变量显然在此行之前具有正确的值(如调试透视图所示):

result= (SoapObject) envelope.getResponse();
Run Code Online (Sandbox Code Playgroud)

在这条线上,抛出了SoapFault; 您可以比较以下代码和屏幕截图.有人可以建议为什么会发生这种情况以及还有什么可以解决这个问题?

try{
result = (SoapObject) soapEnvelope.getResponse();
} catch (Throwable e) {
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

debugging android soap-client soapfault android-ksoap2

5
推荐指数
0
解决办法
1578
查看次数

例外; 连接完成后无法设置请求属性; 发生在Android棒棒糖HTC M8上

我正在使用请求Java Web ServiceAndroid应用程序调用Soap.有一种方法可以通过应用程序调用,几乎在所有设备和三星设备中的Android版本Kit KatLollipop可以正常工作,但不适用于HTC M8 Lollipop更新设备.
以下是我的代码.

HttpTransportSE ht = new HttpTransportSE("URL");
SoapObject so = new SoapObject("Namespace", "Method");
try {
    SoapSerializationEnvelope se = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    so.addProperty("input1", data);
    data = se.getResponse().toString();//This is where Exception occurs

}catch(Exception ex){
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

一个Exception试图让响应由注释指示和精确的时,会发生Exception如下.

java.lang.IllegalStateException: Cannot set request property after connection is made
at com.android.okhttp.internal.http.HttpURLConnectionImpl.setRequestProperty(HttpURLConnectionImpl.java:496)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.setRequestProperty(DelegatingHttpsURLConnection.java:258)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:25)
at org.ksoap2.transport.ServiceConnectionSE.setRequestProperty(ServiceConnectionSE.java:101)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:156)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
Run Code Online (Sandbox Code Playgroud)

我一直在寻找这个但是找不到合适的答案或解决方法.

我查找了
Ksoap2 Android …

java android web-services android-ksoap2 android-5.0-lollipop

5
推荐指数
1
解决办法
1307
查看次数