Java ksoap2 org.xmlpull.v1.xmlpullparserexception预期的开始标记错误

Java ksoap2 org.xmlpull.v1.xmlpullparserexception预期的开始标记错误,java,android,asp.net,ksoap2,android-ksoap2,Java,Android,Asp.net,Ksoap2,Android Ksoap2,下面是我为验证用户登录凭据而编写的代码。使用.net编写的web服务 private static final String SOAP_ACTION = "http://tempuri.org/getCredentials"; private static final String OPERATION_NAME = "getCredentials"; private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/"

下面是我为验证用户登录凭据而编写的代码。使用.net编写的web服务

private static final String SOAP_ACTION = "http://tempuri.org/getCredentials";
private static final String OPERATION_NAME = "getCredentials";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://myStaticIP:portNo/WebSiteName/CommunicationInterface.asmx"; 

SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
request.addProperty("username",Username);
request.addProperty("password", Password);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httptransport = new HttpTransportSE(SOAP_ADDRESS);

try
{
    httptransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
String value = result.toString();
value_LoginWS = value;
val = value;
login_status = Boolean.valueOf(result.toString());

Log.v("CS return value: -", result.toString());
return value;
}
catch (Exception e) 
{
     Log.v("Exception Soap" , e.toString());
}


行“httptransport.call(SOAP\u操作,信封)”
我得到
异常

"org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>
@1:7 in java.io.InputStreamReader@41afb3f0)" <br/><br/>
“org.xmlpull.v1.XmlPullParserException:应为:开始标签{http://schemas.xmlsoap.org/soap/envelope/}信封(位置:开始标签)
@java.io中的1:7。InputStreamReader@41afb3f0)“

我不知道错误是怎么回事。这段代码非常适合emulator(将staticIP更改为10.0.2.2:portNo)。

private static final String SOAP_ACTION = "http://tempuri.org/getCredentials";
private static final String OPERATION_NAME = "getCredentials";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://myStaticIP:portNo/WebSiteName/CommunicationInterface.asmx"; 

SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
request.addProperty("username",Username);
request.addProperty("password", Password);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httptransport = new HttpTransportSE(SOAP_ADDRESS);

try
{
    httptransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
String value = result.toString();
value_LoginWS = value;
val = value;
login_status = Boolean.valueOf(result.toString());

Log.v("CS return value: -", result.toString());
return value;
}
catch (Exception e) 
{
     Log.v("Exception Soap" , e.toString());
}
请帮我解决这个问题


多谢各位

我发现这个问题的答案是,在SOAP_地址字符串中,删除/WebSiteName部分,它就可以正常工作了。我已经在我的android设备上测试过了。工作完美

更正的字符串应如下所示:

private static final String SOAP_ADDRESS = "http://myStaticIP:portNo/CommunicationInterface.asmx";
其中,CommunicationInterface.asmx是web服务名称。 其他静态变量保持不变


注意:当网站托管在IIS中时使用此选项

下面的解决方案已测试并用于WCF Web服务

如果您遇到此错误

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>
@1:7 in java.io.InputStreamReader@41afb3f0)"
我努力寻找这些基本但重要的值来运行
ksoap2

METHOD_NAME="";
NAMESPACE ="";      
SOAP_ACTION ="";
URL ="";
有各种各样的例子告诉我,这个值背后的理论是如何产生它们的 SOAP\u ACTION=名称空间+方法\u名称

我继续尝试各种组合,但没有结果

像我这样的人,对Web服务和Ksoap2几乎没有经验,大部分时间都对JSON感到厌烦 实际上,这些值是什么,以及如何正确获取它们

通过以下步骤后,您将永远不会遇到查找这些值的困难

运行您的Web服务

1。网络服务

它会向你展示一个像这样的窗口

2。WSDL

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <html>
@1:7 in java.io.InputStreamReader@41afb3f0)"
现在,单击pick中标记的链接以查看其
WSDL

它看起来像这样

3.获取Web服务的命名空间

现在使用
Ctrl+F

你会得到这样的结果

在这里,您会注意到我们有两个
名称空间

targetNamespace="http://tempuri.org/">
<wsdl:import namespace="iscservices.dedicated.co.za"
如果您无法看到上面的快照,或者无法在
WSDl
中获取这些快照的值,请告诉
WebService-devoper
来解决这个问题

稍后介绍如何使用KSoap2

请参阅下面的代码片段

SoapObject req = new SoapObject(NAMESPACE,METHOD_NAME);
            //SoapObject req = new SoapObject(Namespace_Server,MethodName_Server);

    //req.addProperty(KEY, VALUE);
//Key : - parameter name that is there in URL of webservice
//value:- value we want to send to the parameter
    req.addProperty("ImageData", data);
    req.addProperty("login", CommonStaticData.getusername());
    req.addProperty("password",CommonStaticData.getpassword());
    req.addProperty("recipeId",FileID);

    MarshalBase64 mbase = new MarshalBase64();// marshal is used to serialize the byte array

    SoapSerializationEnvelope envelop = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelop.bodyOut = req;
    envelop.encodingStyle = SoapSerializationEnvelope.ENC2001;
    envelop.dotNet = true;
    envelop.setOutputSoapObject(req);


    HttpTransportSE aht = new HttpTransportSE(URL);

    mbase.register(envelop);


    aht.call(SOAP_ACTION,envelop);

@Azone给出的答案各不相同,但实际上,如果ksoap以


预期的开始标记{…}信封(位置:开始标记如果您使用了Azone的答案中描述的
名称空间
URL
SOAP\u操作
、和
方法名称
的值,但仍然得到错误,请检查此语句中的SOAP版本

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VERXX);
在我的例子中,我使用了
SoapEnvelope.VER12
,当我将其更改回
SoapEnvelope.VER11
,错误得到了解决

如何从WSDL中查找SOAP版本:

引述自:

SOAP1.1使用名称空间

SOAP1.2使用名称空间

wsdl能够在以下位置定义soap 1.1和soap 1.2下的操作: 在相同的wsdl中使用相同的时间。如果您需要改进,这将非常有用 您的wsdl支持需要SOAP1.2(例如。 在这种情况下,您不需要创建新服务,只需 进化出原来的一个


@扎普:你说那个朋友是什么意思……我也犯了同样的错误,发现这与我的代码无关。如果你在模拟器上运行,请重新启动你的工作环境,再试一次。你可能需要重复几次,但最终对我有效!@AZone我需要关于SOAP的帮助。@Piyusgupta好的,什么样的帮助。我需要帮助我在这方面并不专业。一旦我在一个项目中实施了它。但我仍然想知道你们在这方面面临什么类型的问题SOAP@AZone我已经在谷歌上搜索了很多东西,我也检查了所有与之相关的东西,但我使用的一切都很完美。@Solace据我所知,他们有扩展名为
.asmx
@AZon的端点e谢谢你提供的信息。我的答案不是以
.asmx
结尾,但你的答案中的信息仍然非常有用。但是我检查了所有内容,所有内容都是根据我的客户端程序中你的答案进行的,并且仍然得到错误。然后我意识到我使用的是
SoapEnvelope.VER12
,这是错误的版本,将其更改为
SoapEnvelope.VER11
,并开始工作。因此,我写了一个答案,其中我首先指出了这个答案,然后添加了我的分。在添加
envelope.env=”之后http://schemas.xmlsoap.org/soap/envelope/“;
我仍然得到
预期的开始标记…
错误…@b因此您应该配置ksoap“信封”与您在服务器上使用的“信封”相同,不允许复制和粘贴我的数据示例。如果您无法访问服务器,请使用soapUI工具使用wireshark确定您的“信封”,并对设备进行一些卷曲,显示默认的soapenv(xmlsoap)不正确,我需要将其设置为(w3.org)如您所示。谢谢!我使用的是
Version 11
,但仍然出现此错误,请帮助我解决此问题。我已将其声明为
private static final String URL=”http://my_system_ip:3908/WebService.asmx?“;
但仍无法删除错误
self._envelope.setAttribute ('xmlns:soapenv', 'http://www.w3.org/2003/05/soap-envelope')
self._envelope.setAttribute ('xmlns:soapenv', 'http://schemas.xmlsoap.org/soap/envelope/') 
envelope.env = "http://schemas.xmlsoap.org/soap/envelope/";
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VERXX);