2
所以我正在开发一个应用程序连接到一个Web服务。这个连接工作正常。我已经使用返回“Hello Christian”的简单方法对其进行了测试。这在应用中显示正确。如果我尝试使用参数(名称)执行此操作,它将返回“Hello null”。KSOAP和web服务器通信(PropertyInfo)
从技术上讲,我正在使用Android 4.2.2和KSOAP 2.6.5。 Web服务正在Oracle WebLogic v12上运行。以下我的源代码:
private final String NAMESPACE_Local = "http://test.com/";
private final String URL_Local = "http://168.185.226.69:7001/neuesProjekt/neuerWebServiceService";
private final String SOAP_ACTION_Local = "Hello_Action_Name";
private final String METHOD_NAME_Local = "helloname";
private final String URL_Local = "http://168.185.226.21:7001/myTest/myTestWebServiceService";
private final String SOAP_ACTION_Local = "Hello_Action_Extend";
private final String METHOD_NAME_Local = "hello_extend";
public void LocalServer(View view)
{
TextView text = (TextView) findViewById(R.id.update_text);
SoapObject request = new SoapObject(NAMESPACE_Local, METHOD_NAME_Local);
// request.addProperty("name", "Christian");
// String name = "Christian";
//
// PropertyInfo nameProp =new PropertyInfo();
// nameProp.name = "name";
// nameProp.type = String.class;
// nameProp.namespace = NAMESPACE_Local;
// nameProp.setValue(name);
// request.addProperty(nameProp);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_Local);
try {
androidHttpTransport.call(SOAP_ACTION_Local, envelope);
SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
Log.i("myApp", response.toString());
text.setText(response.toString());
} catch (Exception e) {
Toast.makeText(this,"Device or service offline",Toast.LENGTH_LONG).show();
}
}
我试着以两种方式添加propertyInfo。首先用简单的request.addProperty和创建PropertyInfo并在之后添加它的很长一段路。这两种方式都行不通。 但是,当我从服务器尝试一些教程(例如摄氏温度到华氏温度)时,它可以工作并返回正确的答案。
这里从Web服务器的“代码”:
package com.test;
import javax.jws.*;
@WebService
public class myTestWebService {
@WebMethod(action="Hello_Action")
public String hello() {
return "hello";
}
@WebMethod(action="Hello_Action_Extend")
public String hello_extend(String name)
{
return "hello "+name;
}
}
继情况下,WSDL文件,它可以帮助解决我的问题:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.6hudson-86 svn-revision#12773. -->
<definitions targetNamespace="http://test.com/" name="myTestWebServiceService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:tns="http://test.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<types>
<xsd:schema>
<xsd:import namespace="http://test.com/" schemaLocation="myTestWebServiceService_schema1.xsd"/>
</xsd:schema>
</types>
<message name="hello">
<part name="parameters" element="tns:hello"/>
</message>
<message name="helloResponse">
<part name="parameters" element="tns:helloResponse"/>
</message>
<portType name="myTestWebService">
<operation name="hello">
<input wsam:Action="Hello_Action" message="tns:hello"/>
<output wsam:Action="http://test.com/myTestWebService/helloResponse" message="tns:helloResponse"/>
</operation>
</portType>
<binding name="myTestWebServicePortBinding" type="tns:myTestWebService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="hello">
<soap:operation soapAction="Hello_Action"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="myTestWebServiceService">
<port name="myTestWebServicePort" binding="tns:myTestWebServicePortBinding">
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
</port>
</service>
</definitions>
所以我希望你可以帮我,因为我很无知该怎么做。 亲切的问候, 基督教