zoukankan      html  css  js  c++  java
  • webservice客户端连接方式

    推荐使用方式一,不用生成客户端代码

    方式一:使用HTTPConduit 调用方式

    注意:dom4j要求root根节点只有一个,单节点使用client.invoke("process", xml),多节点使用client.invoke("process", xml,xml2);。
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
    import org.apache.cxf.transport.http.HTTPConduit;
    import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
    private Object[] connectWS(String xml,String xml2,String url){
            JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
            System.out.println("wsUrl===="+url);
            Client client = factory.createClient(url);
            // 需要密码的情况需要加上用户名和密码
            //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
            HTTPConduit conduit = (HTTPConduit) client.getConduit();
            HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
            httpClientPolicy.setConnectionTimeout(2000);  //连接超时
            httpClientPolicy.setAllowChunking(false);    //取消块编码
            httpClientPolicy.setReceiveTimeout(120000);     //响应超时
            conduit.setClient(httpClientPolicy);
            Object[] objects = null;
            try {
                org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor a = null;
                System.out.println("数据:--->>>" + xml);
               // 单节点,只传xml,xml可以document.asXML()
               // objects = client.invoke("process", xml);
               // 多节点,每个节点是一个参数,直接传节点内容,本次对接接口不能用document.asXML()。
                objects = client.invoke("process", xml,xml2);
                String result = objects.toString();
                System.out.println("返回数据:result---->>>" + result);
                System.out.println("返回数据:---->>>" + objects[0]);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return  objects;
        }  

    方式二:使用idea生成webservice客户端接口IIHService(wsimport生成客户端代码 )

    (1)使用生成的IIHServiceService调用IIHService(proces为webservice接口方法名)

    注意:此方法webservice的地址需写死在IIHServiceService 中,不利于部署和更改地址

    IIHServiceService iihServiceService = new IIHServiceService();
    IIHService iihService= iihServiceService.getIIHServicePort();
    // iihService 调用接口
      String xml = "入参的xml格式";
      String result = iihService.process("XXX",xml);
      System.out.println(result);  

    (2) 使用service编程调用IIHService(proces为webservice接口方法名)

    package XX;  
    
    import java.io.IOException;
    import java.net.URL;
    
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
    
    import XX.IIHService ;  
    
    /** 
     *  Description:Service编程实现服务端调用
     *  这种方式同样需要wsimport生成客户端代码,只不过仅需要将服务接口类引入即可,例如如果需要 
     *  端口服务,则需要将生成的IIHService .class类引入
     */  
    public class ServiceClient {  
    
        public static void main(String[] args) throws IOException {  
            //创建WSDL的URL,注意不是服务地址  
            URL url = new URL("http://IIII:PPPP/CC/IIHService?wsdl");  
    
            //创建服务名称  
            //1.namespaceURI - 命名空间地址 (wsdl文档中的targetNamespace)
            //2.localPart - 服务视图名  (wsdl文档中服务名称,例如<wsdl:service name="IIHServiceService">)
            QName qname = new QName("http://IIII/", "IIHServiceService");  
    
            //创建服务视图  
            //参数解释:  
            //1.wsdlDocumentLocation - wsdl地址  
            //2.serviceName - 服务名称  
            Service service = Service.create(url, qname);  
            //获取服务实现类 
            //参数解释:serviceEndpointInterface - 服务端口(wsdl文档中服务端口的name属性)
            IIHService iihService= service.getPort(IIHService.class);  
            //调用查询方法  
            String xml = "入参的xml格式";
            String result = iihService.process("XXX",xml);
            System.out.println(result);  
        }  
    }     
  • 相关阅读:
    java 构建一个简单的菜单
    java JSplitPane
    java 使用ActionListener监控
    java 显示单选按钮
    工作 激情
    明天会更好
    记录
    现在
    嘿嘿
    书籍 知识
  • 原文地址:https://www.cnblogs.com/tong2018/p/14688887.html
Copyright © 2011-2022 走看看