Java使用JaxWsDynamicClientFactory和HttpURLConnection调取Webservice接口

点击上方“猿芯”,选择“设为星标

后台回复"1024",有份惊喜送给面试的你

方式1.  代理类工厂的方式,需要拿到对方的接口

try {
    // 接口地址
    // 代理工厂
    JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
    // 设置代理地址 wsdlAddress: WSDL地址(http://localhost:8082/ws/services/bank?wsdl)
    jaxWsProxyFactoryBean.setAddress(wsdlAddress);
    // 设置接口类型
    jaxWsProxyFactoryBean.setServiceClass(ICommonService.class);
    // 创建一个代理接口实现
    ICommonService cs = (ICommonService) jaxWsProxyFactoryBean.create();
    // 数据准备
    String userName = "Leftso";
    // 调用代理接口的方法调用并返回结果
    String result = cs.sayHello(userName);
    System.out.println("返回结果:" + result);
} catch (Exception e) {
    e.printStackTrace();
}
方式2. 动态调用方式
//WSDL路径 
  String wsUrl = "http://localhost:8082/ws/services/bank?wsdl"  ;  
   //方法名 
   String method = "getCaseProve"; 
    
    JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
    Client client = factory.createClient(wsUrl);
    Endpoint endpoint = client.getEndpoint();
    QName opName = new QName(endpoint.getService().getName().getNamespaceURI(), method);
    BindingInfo bindingInfo = endpoint.getEndpointInfo().getBinding();
   System.out.println(client);
    if (bindingInfo.getOperation(opName) == null) {
      for (BindingOperationInfo operationInfo : bindingInfo.getOperations()) {
        if (method.equals(operationInfo.getName().getLocalPart())) {
          opName = operationInfo.getName();
          break;
        }
      }
    }
  //请求报文
  String xmlInput= "<Request RequestType=\"RegInfo\"><MachineInfo MachineAccount=\"1\" MachinePassword=\"1\"></MachineInfo><FiterInfo UnitNo=\""
          + unit
          + "\" HouseID=\""
          + houseId
          + "\" RecHouseNum=\""
          + recHouseNum + "\"></FiterInfo></Request>";
  Object[] res = null;     
   try { 
     res = client.invoke(opName, xmlInput);  
     String xml = (String) res[0];
     System.err.println("@@@@@@@@@@@@@@@@@"+xml);
   } catch (Exception e) {     
     e.printStackTrace();     
   }
方式3. HttpURLConnection调用方式
public class PropertiesUtil {
    private static final Logger logger = LoggerFactory
            .getLogger(PropertiesUtil.class);
    private static Properties properties = null;
    private static String fileName = "/app.properties";
    static {
        properties = new Properties();
        try {
            properties.load(PropertiesUtil.class.getResourceAsStream(fileName));
        } catch (IOException e) {
            logger.error("加载配置文件失败", e);
        }
    }


    public static Properties getProperties() {
        return properties;
    }


    public static String getProp(String propName) {
        return properties.getProperty(propName);
    }
}


public static Map<String, String> resultInterface(String id,String type, String jsonStr) {
    StringBuilder res = new StringBuilder();
    // 1:创建服务地址
    URL url;
    String resultUserName = PropertiesUtil.getProp("resultUserName");
    String resultPassWord = PropertiesUtil.getProp("resultPassWord");
    Map<String, String> map = new HashMap<String, String>();
    try {
      url = new URL(PropertiesUtil.getProp("resultUrl"));
      // 2:打开到服务地址的一个连接
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      // 3:设置连接参数
      // 3.1设置发送方式:POST必须大写
      connection.setRequestMethod("POST");
      // 3.2设置数据格式:Content-type
      connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
      // 3.3设置输入输出,新创建的connection默认是没有读写权限的,
      connection.setDoInput(true);
      connection.setDoOutput(true);
      //"{\"ANNOUNCEMENT_CODE\": \"CSGGBH001\",\"ANNOUNCEMENT_CONNECT\": \"asdfasdfasdfasdfasdfasdfasdfsa\",\"ANNOUNCEMENT_DEADLINE\": \"20181031\",\"ANNOUNCEMENT_GUID\": \"71F15848-C296-4A60-883C-223C55E9E8D8\",\"ANNOUNCEMENT_START_TIME\": \"20181101\",\"ANNOUNCEMENT_TITLE\": \"公告标题\",\"ANNOUNCEMENT_TYPE\": \"1\",\"ANNOUNCEMENT_UNIT\": \"单位\",\"ATTACHMENT_SET_CODE\": \"123\",\"CANCEL_REASON\": \"撤销理由\",\"CHANGE_TIME\": \"20181101\",\"CONTACT_NUMBER\": \"13333333333\",\"CONTACT_PERSON\": \"联系人\",\"CREATE_TIME\": \"20181101\",\"DATA_TIMESTAMP\": \"20181101154911\",\"EMAIL\": \"123@qq.com\",\"END_DATE\": \"20181101\",\"FIELD_NUM\": \"123\",\"LAND_DISTRICT\": \"440601\",\"LIAISON_UNIT\": \"单位\",\"LISTING_DEADLINE\": \"\",\"LISTING_START_TIME\": \"\",\"LISTING_TYPE\": \"0\",\"PLATFORM_CODE\": \"91441900708017879M\",\"PUBLISHING_TIME\": \"20181101\",\"PUB_SERVICE_PLAT_CODE\": \"123707003283632515\",\"RETREAT_TIME\": \"20181101\",\"SUPPLY_TYPE\": \"1\",\"UNIFIED_DEAL_CODE\": \"B01-123707003283632515-20181025-000015-V\",\"UNIT_ADDRESS\": \"单位地址\",\"URL\": \"http://www.baidu.com\",\"ZIP_CODE\": \"215600\"}";
      //TDJYGG
      // 4:组织SOAP协议数据,发送给服务端
      String soapXML = "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
          + "       <soap12:Header>                           "
          + "         <root xmlns=\"http://tempuri.org/\">      "
          + "           <UserName>"+resultUserName+"</UserName>           "
          + "           <PassWord>"+resultPassWord+"</PassWord>           "
          + "         </root>                                 "
          + "       </soap12:Header>                          "
          + "       <soap12:Body>                             "
          + "         <Push xmlns=\"http://tempuri.org/\">      "
          + "           <Type>"+type+"</Type>                   "
          + "           <JsonStr>"+jsonStr+"</JsonStr>"
          + "         </Push>                                 "
          + "       </soap12:Body>                            "
          + "     </soap12:Envelope>";
      OutputStream os = connection.getOutputStream();
      os.write(soapXML.getBytes("utf-8"));


      // 5:接收服务端的响应
      int responseCode = connection.getResponseCode();
      if (200 == responseCode) {// 表示服务端响应成功
        InputStream is = connection.getInputStream();
        InputStreamReader isr = new InputStreamReader(is,"utf-8");
        BufferedReader br = new BufferedReader(isr);
        String temp = null;
        while (null != (temp = br.readLine())) {
          res.append(temp);
        }
        
        is.close();
        isr.close();
        br.close();
        String xml = res.toString();
        Document doc = DocumentHelper.parseText(xml); // 将字符串转为XML
        Element rootElt = doc.getRootElement(); // 获取根节点
        //System.out.println("根节点:" + rootElt.getStringValue()); 
        
        Element nameElem = rootElt.element("Body").element("PushResponse").element("PushResult");
        String code = nameElem.element("Code").getTextTrim();
        String description = nameElem.element("Description").getTextTrim();
        map.put("code", code);
        map.put("description", description);
      } else {
        //res.append("调接口异常!");
        map.put("code", "500");
        map.put("description", "数据推送失败,服务端响应失败!");
        logger.error("数据推送失败,服务端响应失败!");
      }
      os.close();
    } catch (Exception e) {
      //res.append("调接口异常!");
      map.put("code", "500");
      map.put("description", "数据推送异常,推送信息为trans_notice表或trans_target表的id>>>>:" + id);
      logger.error("数据推送异常,推送信息为trans_notice表或trans_target表的id>>>>:" + id + "", e);
    }
    
    return map;
  }

原文:https://www.cnblogs.com/gaomanito/p/10043753.html

e51d53437d3eb5b779b5595208bb3348.jpeg

往期推荐

  1. 肝九千字长文 | MyBatis-Plus 码之重器 lambda 表达式使用指南,开发效率瞬间提升80%

  2. 用 MHA 做 MySQL 读写分离,频繁爆发线上生产事故后,泪奔分享 Druid 连接池参数优化实战

  3. 微服务架构下,解决数据库跨库查询的一些思路

  4. 一文读懂阿里大中台、小前台战略

作者简介猿芯,一枚简单的北漂程序员。喜欢用简单的文字记录工作与生活中的点点滴滴,愿与你一起分享程序员灵魂深处真正的内心独白。我的微信号:WooolaDunzung,公众号【猿芯输入 1024 ,有份面试惊喜送给你哦

< END >

【猿芯】

c978092a515c07b425d9cdc7de96904c.jpeg

 微信扫描二维码,关注我的公众号。

分享不易,莫要干想,如果觉得有点用的话,动动你的发财之手,一键三连击:分享、点赞、在看,你们的鼓励是我分享优质文章的最强动力 ^_^

分享、点赞、在看,3连3连!29eda13e3cfdca94404032034d044d3d.gif

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值