2

所以我正在开发一个应该连接到网络服务的 Android 应用程序。此连接工作正常。我已经使用返回“Hello Christian”的简单方法对其进行了测试。这在应用程序中显示正确。如果我尝试使用参数(名称)执行此操作,它会返回“Hello null”。

从技术上讲,我正在使用 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 并在之后添加它的漫长过程。两种方式都行不通。但是,当我使用某些教程中的服务器(例如摄氏度到华氏度)尝试它时,它可以工作并返回正确的答案。

这里是来自网络服务器的“代码”:

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>

所以我希望你们中的一个可以帮助我,因为我完全不知道该怎么做。亲切的问候,克里斯蒂安

4

1 回答 1

0

我对此并不擅长,事实上,我的 Web 服务仅在本周才能正常工作。

尝试

envelope.dotNet = true;
String name = "Christian";
request.addProperty("name", name);

或者

envelope.dotNet = true;
PropertyInfo nameProp =new PropertyInfo();
nameProp.setName("name");
nameProp.setType(String.class);
nameProp.setValue(name);
request.addProperty(nameProp);

我希望这可以为您解决

于 2014-12-12T15:55:10.077 回答