无法从android传递参数到Web服务

时间:2012-08-28 18:03:47

标签: android web-services soap

我的安卓代码

public class MainActivity  extends Activity {

    TextView et,tv1;
    private static String url = "//10.0.2.2:8090/WebApplication8/du";
    private boolean add;
    private static final String NAMESPACE = "//db/";
    private static final String SOAP_ACTION = "//db/du/helloRequest";
    private static final String METHOD_NAME = "hello";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // listAdapter = new ArrayAdapter<String>(this, R.layout.list_item);  
        //  setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1));  

        //    setListAdapter(adapter);

        //list1=(ListView)findViewById(R.id.list1);
        TextView tv;
        InputStream is = null;

        //String[] values = new String[] { "Mercury", "Venus", "Earth", "Mars",  
        //   "Jupiter", "Saturn", "Uranus", "Neptune"};    

        tv=(TextView)findViewById(R.id.tv1);

        // Create ArrayAdapter using the planet list.  
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        try
        {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
            request.addProperty("parameters", 51);
            request.addProperty("username", "Rajapandian");
            request.addProperty("password", "Rajapandian");

            SoapSerializationEnvelope envelope =  new SoapSerializationEnvelope(SoapEnvelope.VER11); 

            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(url);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
            tv.setHint("Received :" + resultsRequestSOAP.toString());
        }
        catch (Exception e) {
            e.printStackTrace();
        }

    }
}

这是我的wsdl

<definitions targetNamespace="//db/" name="du"><types><xsd:schema><xsd:import namespace="http://db/" schemaLocation="http://localhost:8090/WebApplication8/du?xsd=1"/></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="du"><operation name="hello"><input wsam:Action="//db/du/helloRequest" message="tns:hello"/><output wsam:Action="//db/du/helloResponse" message="tns:helloResponse"/></operation></portType><binding name="duPortBinding" type="tns:du"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="hello"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="du"><port name="duPort" binding="tns:duPortBinding"><soap:address location="http://localhost:8090/WebApplication8/du"/></port></service></definitions>

这是我的du.java

@WebService(serviceName = "du")
public class du {



/**
 * This is a sample web service operation
 */
  @WebMethod(operationName = "hello")
 public String hello(@WebParam(name ="id",targetNamespace="http://db/" )int id,@WebParam(name ="username",targetNamespace="http://db/" ) String username,@WebParam(name ="password",targetNamespace="http://db/" )String password) {


 {


 String result="",user="",pass="";

    try
       {

        Class.forName("com.mysql.jdbc.Driver");
      Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/users","root","789456");
   String query=  "Insert into users(id,password,username)                values('"+id+"','"+password+"','"+username+"')";
      PreparedStatement stm = con.prepareStatement(query); 

   stm.executeUpdate();







} 
      catch(ClassNotFoundException e){
  System.err.println ("Sql Exception"+e);
      }


      catch(SQLException e){
  System.err.println ("Sql Exception"+e);
      }

    return "hey"+ id+"\n"+username+"\n"+password;
}
}

    }

当我测试这一切都工作正常,数据插入mysql数据库但其问题来自android数据未发送和null,null结果插入mysql表并且在android屏幕上收到null响应 在我的服务器日志中,我收到此警告

WARNING: Received WS-I BP non-conformant Unquoted SoapAction HTTP header: ://db/du/helloRequest

请告诉我什么是错的

2 个答案:

答案 0 :(得分:0)

您的连接参数缺少http标记。

    private static String url = "http://10.0.2.2:8090/WebApplication8/du";
    private static final String NAMESPACE = "http://db/";
    private static final String SOAP_ACTION = "http://db/du/helloRequest";
    private static final String METHOD_NAME = "hello";

注意:肥皂动作=命名空间+方法名称。

因此,您的METHOD_NAME应为"helloRequest"SOAP_ACTION应为"http://db/du/hello"(取决于您使用的内容)。

答案 1 :(得分:0)

抱歉,我无法发表评论,只是回答。警告与问题无关。

我有同样的警告。警告只是要求您“引用”SOAP_ACTION。让我们这样做:

您的代码:

private static final String SOAP_ACTION = "http://db/du/helloRequest";

引用代码:

private static final String SOAP_ACTION = "\"http://db/du/helloRequest\"";

请注意\“,它会将引号发送到服务器。