由于业务上的需要,需要访问第三方提供的webservice接口,但由于公司做了对外访问的限制,不设置代理是不能外网的,如果使用http设置代理访问外网还是比较容易的,但使用cxf有点不知道从哪里入手。网上也有一些零散的信息,现在我整理一下提供参考。

1、JaxWsProxyFactoryBean设置代理

import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; public class TeacherService { public String getStudents(StudentCard card){
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(TeacherWebService.class);
factoryBean.setAddress("http://xxx.xxx.xxx.xxx/webservice?wsdl");
TeacherWebService tService = (TeacherWebService )factoryBean.create();    Client client = ClientProxy.getClient(tService);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy hcp = new HTTPClientPolicy();
hcp.setProxyServer(proxyHost);
hcp.setProxyServerPort(proxyport);
http.setClient(hcp); ProxyAuthorizationPolicy proxyAuthorization = new ProxyAuthorizationPolicy();
proxyAuthorization.setUserName(proxyUsername);
proxyAuthorization.setPassword(proxyPassword);
http.setProxyAuthorization(proxyAuthorization); String res = tService.getStudents(card); return res;
}
}

2、使用JaxWsDynamicClientFactory设置代理

import java.net.Authenticator;
import java.net.PasswordAuthentication;
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import com.thoughtworks.xstream.XStream; public class TeacherService { public String getStudents(StudentCard card)throws Exception{
     System.setProperty("http.proxyHost","http.proxy.host");
System.setProperty("http.proxyPort", "http.proxy.port");
Authenticator.setDefault(new MyAuthenticator("username", "password"))); JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); //url为调用webService的wsdl地址
Client client = dcf.createClient("http://xxx.xxxx.xxx.xxx:8080/webservice?wsdl");
//namespace是命名空间,methodName是方法名
QName name=new QName("http://www.xxxx.com","getStudents");
    XStream xstream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));
Object[] objects = client.invoke(name,xstream.toXML(card)); String res = "";
if(objects != null && objects.length != 0){
res = objects[0].toString();
} return res;
  }

  static class MyAuthenticator extends Authenticator {
    private String username, password;

    public MyAuthenticator(String username, String password) {
      this.username = username;
      this.password = password;
    }

    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password.toCharArray());
    }
  }

}

cxf设置代理访问webservice接口的更多相关文章

  1. WebService---Android中访问WebService接口的方法

     最近公司有个项目需要从Android平台访问WebService接口,实现向发布的函数传递对象.在网上找了一些资料,发现使用ksoap2可以调用WebService传递对象.   需要引入ksoap ...

  2. 十九、.net core使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问webservice接口

    使用SoapCore实现在.net core平台下开发webservice:以及使用HttpClientFactory动态访问webservice. 首先,需要在包项目下面引用SoapCore: 然后 ...

  3. CXF集成spring做webservice接口

    一 . cxf 的jar包 1.cxf-2.3.3.jar 2.wsdl4j-1.6.2.jar 3.wss4j-1.5.11.jar 4.wstx-asl-3.2.0.jar 5.XmlSchema ...

  4. 浏览器 Proxy SwitchyOmega 插件设置代理访问内网服务器

    使用Proxy SwitchyOmega 插件通过代理 直接访问到内网网站 一.使用场景 如下图所示,如果在电脑的网络设置中开启代理,每次更换代理就需要进入这里设置改变代理.且我们可能回需求到两个网页 ...

  5. Java 通过代理测试webService接口

    以下代码针是针对电脑是通过代理上网的情况时使用: System.getProperties().put("http.proxyHost", "111.111.11.1&q ...

  6. [python]通过urllib2设置代理访问网址

    #!/usr/bin/env pythonimport urllib2 # change followings before useuser = 'foo'passwd = 'bar'proxyser ...

  7. emacs设置代理访问插件仓库

    下面这个配置适合ss (setq url-gateway-method 'socks)(setq socks-server '("Default server" "127 ...

  8. 『动善时』JMeter基础 — 50、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

  9. 『动善时』JMeter基础 — 51、使用JMeter测试WebService接口

    目录 1.什么是WebService 2.WebService和SOAP的关系 3.什么是WSDL 4.测试WebService接口前的准备 (1)如何判断是WebService接口 (2)如何获取W ...

随机推荐

  1. android中的线程池学习笔记

    阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...

  2. iOS开发之功能模块--模糊效果

    1.先介绍一个好用的实现模糊效果的框架:https://github.com/YouXianMing/UIImageBlur 2.iOS8 中 UIVisualEffectView 模糊效果的使用 , ...

  3. C语言的泛型编程

    1 问题引入 首先引入一个问题,实现一个泛型的swap函数,分别使用C++和C实现. 2 C++的泛型 C++有良好的泛型编程机制,所以我很快就写出了C++版的泛型swap函数. template&l ...

  4. 打开MySQL数据库远程访问的权限

    说明:转自,http://www.cnblogs.com/ycsfwhh/archive/2012/08/07/2626597.html    本人亲测方法1有效,方法2待验证 下载GPL版本安装 M ...

  5. log4net不同logger输出日志

    4步曲 1.引用log4net.dll(nuget) 2.任意位置的命名空间头部加入下面的代码,web.config可修改为自己定义的.xml [assembly: log4net.Config.Xm ...

  6. CentOS使用yum源中自带的rpm包安装LAMP环境

    CentOS使用yum源中自带的rpm包安装LAMP环境.这是Linux下安装LAMP的环境一种最基本最简便的方式.新手可以从容安装使用. 1. 安装基础包(可选安装)yum install -y w ...

  7. XLT格式化XML那点事(C#代码中的问题解决)(二)

    接上篇<XML通过XSL格式化的那点事(XML到自定义节点折叠显示)>,本文就如何将大的XLST分割成小文件和如何用C#将XML通过XSL生成HTML文件中的问题做下分析,避免有同样需求的 ...

  8. WPF -Enum的三种绑定方法

    一.使用ObjectDataProvider <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat ...

  9. python高级之多线程

    python高级之多线程 本节内容 线程与进程定义及区别 python全局解释器锁 线程的定义及使用 互斥锁 线程死锁和递归锁 条件变量同步(Condition) 同步条件(Event) 信号量 队列 ...

  10. java多线程系类:JUC锁:01之框架

    本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--"JUC锁"01之 框架02. Java多线程系列--"JUC锁&q ...