Kic*_*aha 6 php android soap android-ksoap2
到目前为止,我已经创建了一个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);
PropertyInfo pi = new PropertyInfo();
pi.setName("valname");
pi.setValue("rt2");
pi.setType(String.class);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=false;
envelope.setOutputSoapObject(request);
HttpTransportSE andHttpTransport = new HttpTransportSE(URL);
andHttpTransport.debug = true;
andHttpTransport.call(SOAP_ACTION, envelope);
Run Code Online (Sandbox Code Playgroud)
*返回此值有问题,已收到但从ksoap传回时抛出错误*
soapResponse = (String) envelope.getResponse(); //Exception is thrown here
String strrequest = andHttpTransport.requestDump;
String strresponse = andHttpTransport.responseDump;
}catch(Exception e){soapResponse = "Nope not working "+"\n\n" + e.getMessage() + "/n/n" + e.getStackTrace() ;}
} else {soapResponse="You are not online"; }
tv.setText(soapResponse);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我正在做一些愚蠢的事情,有些人可以指出它,我会很感激.
是否存在不在PHP中缓存和重用wsdl的指令,就像在PHP中一样?
也许使用net beans会有所帮助,那是我有空的时候.如果有人可以在此期间请求帮助,请不要犹豫,建议一些事情.
<?php
class naturallyIrrational {
private $arrval = array("pi" => 3.1415,"e" => 2.7183, "rt2" => 1.414, "phi" => 1.618 );
function getIrrationalvalue($valname) {
$myFile = "logFile.html";
$fh = fopen($myFile, 'a') or die("can't open file");
$datq = date('m/d/Y h:i:s a', time());
fwrite($fh, $datq);
if (isset($this->arrval[$valname])) {
$stringData = " ".$valname." = ".$this->arrval[$valname]."<br/>";
fwrite($fh, $stringData);
fclose($fh);
return $this->arrval[$valname];
} else {
throw new SoapFault("Server","Unknown Symbol '$valname'.");
}
}
}
$server = new SoapServer("naturallyIrrational.wsdl");
$server->setClass("naturallyIrrational");
$server->handle();
Run Code Online (Sandbox Code Playgroud)
我发现 URL 字符串需要指向公共 php.ini。
final String URL = "http://www.naturallyIrrational.com/naturallyIrrationalsoapserver.php"
;
3周后终于完成了一件非常简单的事情。下载源代码至关重要,因为它可以让我看到服务正在运行。关于传递参数还有另一个问题,如下所示:
PropertyInfo pi = new PropertyInfo();
pi.setName("valname");
pi.setValue("rt2");
pi.setType(String.class);
Run Code Online (Sandbox Code Playgroud)
但这是另一个问题了。
谢谢您的意见。
归档时间: |
|
查看次数: |
2140 次 |
最近记录: |