Android作为CXF客户端调用服务端。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android作为CXF客户端调用服务端。相关的知识,希望对你有一定的参考价值。

1 加载jar

下载jar包,放在libs下
技术图片

通过Project Structure添加jar依赖
技术图片

成功后就会在build.gradle下添加
技术图片

代码

    final static String SERVICE_NS = "http://ws.service.mService.et.cn/";
    final static String SERVICE_URL = "http://192.168.9.59:8080/DSer/service/SysService?WSDL";
    private EditText txt1;
    private EditText txt2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //注意下面两行
        StrictMode.ThreadPolicy policy= new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        setContentView(R.layout.activity_cxf);
        Button button = findViewById(R.id.cxf_button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Toast.makeText(CxfActivity.this,"ceshi",Toast.LENGTH_LONG).show();
                getCxf();
            }
        });
        txt1 = findViewById(R.id.cxf_EditText1);
        txt2 = findViewById(R.id.cxf_EditText2);

    }

    public void getCxf() {
        //调用的方法
        String methodName = "getEtUser";
        //创建httpTransportSE传输对象
        HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
        ht.debug = true;
        //使用soap1.1协议创建Envelop对象
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        //实例化SoapObject对象
        SoapObject request = new SoapObject(SERVICE_NS, methodName);
        /**
         * 设置参数,参数名不一定需要跟调用的服务器端的参数名相同,只需要对应的顺序相同即可
         * */
        request.addProperty("userName", "000");
        //将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息
        envelope.bodyOut = request;
        try{
            //调用webService
            ht.call(null, envelope);
            //txt1.setText("看看"+envelope.getResponse());
            if(envelope.getResponse() != null){
                txt2.setText("有返回");
                SoapObject result = (SoapObject) envelope.bodyIn;
                SoapObject soap = (SoapObject) result.getProperty(0); //这个例子是返回一个对象。
                String name =soap.getProperty("name").toString();
                String userName =soap.getProperty("userName").toString();
                String department =soap.getProperty("department").toString();
                txt1.setText("返回值 = "+ name+ " "+userName + " " +department);
            }else{
                txt2.setText("无返回");
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

androidManifest.xml

AndroidManifest.xml下添加

<uses-permission android:name="android.permission.INTERNET" />

以上是关于Android作为CXF客户端调用服务端。的主要内容,如果未能解决你的问题,请参考以下文章

java cxf动态调用服务端的webservices方法

cxf webservice生成客户端代码及调用服务端遇到的问题

XFire客户端调用CXF服务端

CXF的JaxWsDynamicClientFactory调用服务端,服务端收到参数为空

CXF 客服端调用报错

cxf如何创建webservice客户端