[webservice] 09_客户端调用webservice3——客户端编程方式访问

Android 4.0

客户端调用webservice3——客户端编程方式访问

对比:
①采用wsimport方式调用webservice,生成的代码量过多
②采用UrlConnection方式调用webservice,需要手动来解析服务器返回的xml格式数据
③所以现在采用一种折中的方式,客户端编程方式
①wsimport -s . -p cn.zengfansheng.client http://localhost:8080/sayhello?wsdl 
②然后将生成的接口文件Hello.java拷贝的项目中去,(接口文件名是提供服务的名称)
③通过Service静态方法创建对象
④QName
⑤然后调用服务提供的方法
代码:
package cn.zengfansheng.client;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class MyApp {
    public static void main(String[] args) throws Exception {
        
        //1、wsdl地址        
        URL wsdlDocumentLocation = new URL("http://localhost:8080/sayhello?wsdl");
        
        //2、namespaceURI:wsdl文档中definitions节点targetNamespace属性的值
        String namespaceURI = "http://publish.webservice.zengfansheng.cn/";
        //3、localPart:wsdl文档service节点name属性值
        String localPart = "HelloService";
        QName serviceName = new QName(namespaceURI, localPart );
        Service service = Service.create(wsdlDocumentLocation, serviceName);//获得Service对象的实例
        
        //4、参数二:service节点下的port节点name属性值    
        QName portName = new QName(namespaceURI, "HelloPort");
        Class<Hello> serviceEndpointInterface = Hello.class;
        Hello hello = service.getPort(portName, serviceEndpointInterface);
        
        String hi = hello.sayHello("hacket");
        System.out.println(hi);//Hello,hacket
        System.out.println(hello.getClass().getSimpleName());//$Proxy26
    }
}