2013-03-18 3 views
2

Итак, я разрабатываю приложение для Android, которое должно подключиться к веб-службе. Это соединение работает нормально. Я протестировал его с помощью простого метода, который возвращает «Hello Christian». Это правильно отображается в приложении. Если я попытаюсь сделать это с помощью параметра (name), он вернет «Hello null».Связь KSOAP и веб-сервера (PropertyInfo)

Технически я работаю с Android 4.2.2 и KSOAP 2.6.5. Веб-служба работает в 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(); 
     } 
    } 

Я попытался добавить свойствоInfo двумя способами. Сначала с помощью простого request.addProperty и длинного пути создания PropertyInfo и добавления его впоследствии. Оба способа не работают. Однако, когда я пытаюсь использовать его с сервером из некоторого учебника (например, celsius to fahrenheit), он работает и возвращает правильный ответ.

Здесь «код» с веб-сервера:

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> 

Так что я надеюсь, что один из вас может мне помочь, потому что Я совершенно не знаю, что делать. С уважением, Christian

ответ

0

Я не очень хорош в этом и фактически имею только на этой неделе мои веб-службы для работы.

Попробуйте

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); 

Я надеюсь, что это решает для Вас