昨天用手机号码微信无法主动添加好友了刚认识的一个朋友,但是到现在还没有得到回

xcf如何调用https通道的webservice - ITeye问答
朋友们,现在我们系统要和一个通过https发布的webservice对接,需要调用他们的接口,现在没有思路,希望朋友们提点建议,webservice客户端使用cxf。
我的意思是 使用cxf调用https的webservice 需要使用证书,证书对方系统已经提交给我了,现在不知如何下手!!!
问题补充:我使用WSDL2JAVA 生产客户端,我传递的URL 因为是https的,这个时候直接生产,它会报错,那该怎么生成客户端,我的这个HTTPS需要提供证书,不知道如何将证书和WSDL2JAVA结合起来用?如果也能提供解决办法,最好,多谢了
WADLToJava Error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我参考的网址是:/view/6f2ecbad51f303.html
把服务端的证书文件导入你执行wsdl2java的电脑中的JDK信任库中就可以了。
已解决问题
未解决问题如何抓取基于https协议的webservice数据包
方法一:基于Fiddler2等第三方工具(需要在Java端禁用SSL安全检查)
原文拷贝自,向原作者表示敬意
最近在写一个客户端访问客户提供的webservice时,得到响应异常,于是想用工具抓取请求响应的soap数据查找异常原因,如果service是http发布的,用一般的http、tcp监控工具都可以抓到发送数据的原文,但是我请求的service是https发布的,使用一般的较底层的网络抓包工具抓到的都是经过加密的数据。搜索了很多相关文章最后找到了抓取解密后https明文的方法。
我的前题是我使用java写的一段客户端代码请求一个基于https发布的webservice,我的客户端代码工具自动生成的基于JAX-WS的客户端代码。思路是这样的,我们需要找到一个基于proxy的http抓包工具并且他支持https抓包解码。然后在客户端代码中设置代理的ip和端口号然后发送请求就可以利用工具抓到解密后的原文。
我找了一些工具,像apache的tcpMon只能抓到加密过的数据。membrane-monitor感觉界面做的不错,但是貌似对https的代理支持不太完全,像smsniff这样的也是太底层,只能抓到密文。最后发现两个工具可以支持抓到解密后的数据,就是Fiddler2和paros两个都是开源的免费软件。Fiddler2是个不错的工具,安装后他会自动代理ie和firefox等浏览器请求,基本无需设置,默认代理端口是8888.要抓取https数据,需要设置https解密功能打开即可。具体可参考这篇文章
,paros是个相当简单的软件,安装好后只要设置个代理地址和端口就可以了,默认就支持代理和解密https。设置好代理后,该如何使用客户端代码调用呢,首先在调用客户端的代码前我们需要在system
property中设置如下代理的配置项:
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
光这样代码执行还是会得到异常提示需要证书,客户端发送https请求是需要证书信息的,出于调试目的我们可以在客户端代码中设置忽略ssl认证,(这里我们提供一个证书到制定一个路径应该也是可以的,具体参考java
net相关api)这样就可以正常发送请求了,请求成功后,可以看到fidder2中抓到了请求的数据。忽略ssl认证的代码如下:
// The following tells Java to ignore certificate problems
&&TrustManager[] trustAllCerts =
new TrustManager[] { new X509TrustManager() {
java.security.cert.X509Certificate[] getAcceptedIssuers() {
&&&&return
&&&public void
checkClientTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
&&&public void
checkServerTrusted(java.security.cert.X509Certificate[] certs,
String authType) {
&&&SSLContext
context = SSLContext.getInstance("TLS");
&&&context.init(null,
trustAllCerts, new java.security.SecureRandom());
&&&HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
&&} catch (Exception e) {
&&// This tells Java to not worry
about hostnames matching
&&HttpsURLConnection.setDefaultHostnameVerifier(new
HostnameVerifier() {
boolean verify(String string, SSLSession ssls) {
&&&&return
另外可参考
方法二:查看Log4J的log
发送Https请求的Java类库都用到了Apache HttpServer。我们只要打开Log4j的相应开关,就可以在Java
Console中看到Https发送和接收的报文。
具体方法为:将以下两个文件复制到$JAVA_MAVEN_PROJECT/src/main/resources文件夹下,然后正常执行程序就可以了(如果该项目已经定义有log4j.propertes或log4j.xml,需要将两个配置文件合并,具体参考Log4j文档)
log4j.xml(NND,XML源代码一上传新浪微博就丢失,只好发截图了,鄙视新浪一下)
commons-logging.properties
mons.logging.Log = mons.logging.impl.Log4JLogger
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Spring(1)
webService
首先需要webService获取Spring容器中的一个bean
先写一个工具类用于专门获取Spring容器中的bean的,代码如下
* Copyright &
&a href="/thinkgem/jeesite"&JeeSite&/a& All rights reserved.
package mon.
import mons.lang3.V
import org.slf4j.L
import org.slf4j.LoggerF
import org.springframework.beans.factory.DisposableB
import org.springframework.context.ApplicationC
import org.springframework.context.ApplicationContextA
import org.springframework.context.annotation.L
import org.springframework.stereotype.S
* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.
@Lazy(false)
public class SpringContextHolder implements ApplicationContextAware, DisposableBean {
private static ApplicationContext applicationContext = null;
private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);
* 取得存储在静态变量中的ApplicationContext.
public static ApplicationContext getApplicationContext() {
assertContextInjected();
return applicationC
* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
@SuppressWarnings("unchecked")
public static &T& T getBean(String name) {
assertContextInjected();
return (T) applicationContext.getBean(name);
* 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
public static &T& T getBean(Class&T& requiredType) {
assertContextInjected();
return applicationContext.getBean(requiredType);
* 清除SpringContextHolder中的ApplicationContext为Null.
public static void clearHolder() {
if (logger.isDebugEnabled()){
logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);
applicationContext = null;
* 实现ApplicationContextAware接口, 注入Context到静态变量中.
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationC
* 实现DisposableBean接口, 在Context关闭时清理静态变量.
public void destroy() throws Exception {
SpringContextHolder.clearHolder();
* 检查ApplicationContext不为空.
private static void assertContextInjected() {
Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
然后要获取Service时,使用这个类去获取这个bean,具体代码如下
//你需要调用的Service
ImoocService imoocService = SpringContextHolder.getApplicationContext().getBean(ImoocService.class)
imoocService.add(imooc)
这样webService就可以调用Service了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24950次
排名:千里之外
原创:40篇
(6)(2)(10)(1)(1)(3)(9)(11)博客访问: 1996737
博文数量: 1596
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
使用C#创建webservice及三种调用方式GB2312 UTF-8 微软.NET战略的一个比较重要的部分就是webservice,利用webservice我们可以创建真正有效的分布式应用程序。
  下面,我们对webservice做一些说明。
  假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端XML格式的数据。
  现在我们看一看创建一个webservice的大致过程:
  服务端的webservice是必须要建的。中间的soap,xml我们不用去关心,在客户端这边,比较重要的是如何从webservice取得对象?答案是用的是proxy对象。客户端由代理对象(proxy)负责与webservice的通信。所以在客户端使用webservice,完全和使用一个本地对象是一样的。
  我们现在以一个简单的实例来说明。
  打开vs.net,新建工程(asp.net web服务),在位置中键入,其中webserver就是工程的名字。确定后,出现一个Service1.asmx.cx,双击,出现代码窗口,
  using S
  using System.C
  ponentM
  using System.D
  using System.D
  using System.W
  using System.Web.S
  namespace webserver
  /// Service1 的摘要说明。
  public class Service1 : System.Web.Services.WebService
  public Service1()
  //CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的
  InitializeComponent();
  #region Component Designer generated code
  //Web 服务设计器所必需的
  private IContainer components =
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  private void InitializeComponent()
  /// 清理所有正在使用的资源。
  protected override void Dispose( bool disposing )
  if(disposing && components != null)
  components.Dispose();
  base.Dispose(disposing);
  #endregion
  // WEB 服务示例
  // HelloWorld() 示例服务返回字符串 Hello World
  // 若要生成,请取消注释下列行,然后保存并生成项目
  // 若要测试此 Web 服务,请按 F5 键
  // [WebMethod]
  // public string HelloWorld()
  // return "Hello World";
  下面在(1)处加入
  [WebService(Namespace="http://localhost/webserver/"]
  这是因为soap是基于http协议上的,客户端无法知道webservice位于那个服务器上。在实际应用中,比如上放置这个webservice,则Namespace改为
  下面我们给这个webservice添加一个方法。
  // [WebMethod]
  // public string HelloWorld()
  // return "Hello World";
  微软帮我们写好了一个,接着添加一个方法。方法名称叫show.
  [WebMethod]
  public string show(string yourname)
  return “”+”欢迎”+
  现在,就可以运行了,按F5,点击show,输入你的名字,然后点击invote
  看到了吧。
   欢迎yyg
  成功了。打开bin目录,Vs.net已经将proxy做好了.webserver.dll.
  现在我们在不同的环境下测试:
  1. 打开vs.net,新建”windows应用程序”工程,命名为Client,增加按钮,文本框。
  现在要用到代理了,右键单击右边的reference(引用),选择”添加引用”,选择浏览,找到webserver目录下的bin目录下的webserver.dll
  再加入一个system.web.webservices的引用,在列表中有。
  在form1.cs里,加入
  using System.Web.S
  然后在
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.TextBox textBox1;
  后面,插入
  private webserver.service1 Client
  建立一个service1的实例。双击按钮,代码如下:
  private void button1_Click(object sender, System.EventArgs e)
  Client =new Service1();
  name=Client.show("龙卷风.NET";
  textBox1.Text=
  按F5,运行工程,点击按钮,文本框中显示
  欢迎龙卷风.NET
  2. Asp.NET web窗口的测试
  方法与上面的一模一样,添加引用,建立service1的实例
  在此不在细说。
  3.在VB中测试
  这个就要相对来说复杂一些
  首先在vb中建立一个”标准EXE”的工程。添加引用:Microsoft Soap Type library。注意:如果没有安装Microsoft Soap Toolkit,是没有这个类型库的。
  可以在中下载。
  添加一个text
  Private Sub Form_Load()
   Text1.Text = add()
  End Sub
  Public Function Add() As String
  Dim objSoapClient As New SoapClient
   objSoapClient.ClientProperty("ServerHTTPRequest" = True
  Call objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL", "Service1", "Service1Soap"
  这句也可以
  objSoapClient.mssoapinit("http://localhost/webserver/service1.asmx?WSDL"
   Add = objSoapClient.Show("龙卷风.NET"
  End Function
  调试成功需要注意的:
  运行服务端webservice的程序,出现下面时
  支持下列操作。有关正式定义,请查看服务说明。
  点击服务说明,会得到完整的wsdl文件
  我们就要使用这个文件,其中包含了我们定义的方法等等。
  Mssoapinit(bstrWSDLFile as string,[bStrServiceName as string ],[bStrport as string ] ,[bstrWSMLDile as string])的用法:
  其中第二个,第三个参数在wsdl文件中可以找到。也可以省略。
  后续:还有从COM中生成wsdl文件等等,我会陆续推出的。
阅读(29026) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。不顶不行啊! 呵呵! 支持!&&&&
&re: java 调用webservice的各种方法总结
还有个用CXF开发WebService也很简单
&&&&
&re: java 调用webservice的各种方法总结
恩,不错,学习一下。。&&&&
&re: java 调用webservice的各种方法总结
有EJB下的的调用方式吗?&&&&
&re: java 调用webservice的各种方法总结
可以的!我用xfire调用.net的webservice可以的!而且代码也很简单!不能用是因为你的哪个JAR文件加的少!&&&&
&re: java 调用webservice的各种方法总结
如果有什么问题可以联系!或许我能帮你做点什么!qq:&&&&
&re: java 调用webservice的各种方法总结[未登录]
顶啊 受益良多啊 &&&&
&re: java 调用webservice的各种方法总结[未登录]
不错,很好的&&&&
&re: java 调用webservice的各种方法总结[未登录]
首先,这文章写的很好。 对此受益匪浅。但是、你其中使用的的图片都是引用本地的地址图片能换成网络上的吗、这里看不到图片、能看到图片效果更佳&&&&
&re: java 调用webservice的各种方法总结[未登录]
很不错啊!顶顶&&&&
&re: java 调用webservice的各种方法总结
&re: java 调用webservice的各种方法总结
HelloWorldInterface 这个接口是什么啊?在三里的代码&&&&
&re: java 调用webservice的各种方法总结
写的不错,必须赞!&&&&
&re: java 调用webservice的各种方法总结
挺好的,谢谢谢谢&&&&
&re: java 调用webservice的各种方法总结
政治?&&&&
&re: java 调用webservice的各种方法总结
感谢分享!&&&&
&re: java 调用webservice的各种方法总结[未登录]
赞一个&&&&
&re: java 调用webservice的各种方法总结
在自学webservice就数这一篇看了明白多了&&&&
&re: java 调用webservice的各种方法总结
&re: java 调用webservice的各种方法总结
虽然09年写了的,现在依然是精华,赞!&&&&
&re: java 调用webservice的各种方法总结[未登录]
非常感谢能给我回信 这个方面的技术现在我非常需要 望以后我们能合作愉快&&&&
&re: java 调用webservice的各种方法总结[未登录]
如果服务端传参数是用对象传的,那个该怎么传对象过去,如果是动态生成客户端的话&&&&
&re: java 调用webservice的各种方法总结
客户端在调用webservice接口时,如何通过指定代理IP来访问呢(正向代理)?&&&&
&re: java 调用webservice的各种方法总结
学到了&&&&
&re: java 调用webservice的各种方法总结[未登录]
&re: java 调用webservice的各种方法总结[未登录]
总结的很好!顶!&&&&
&re: java 调用webservice的各种方法总结
还是有些不明白啊。用axis的时候那个HelloWorldInterface这个类是哪段代码访问之后自动生成的吗?原来的客户端肯定是没有这个类的吧。还有就是客户端的环境需要那些jar包啊。axis2的客户端方法实验一直不成功啊,那个客户端调用的时候wsdl的url后面不需要添加 &?wsdl& 吗?&&&&
&re: java 调用webservice的各种方法总结
大家可以去 Service的介绍&&&&
&re: java 调用webservice的各种方法总结
大家可以去 Service的介绍
更多评论 &&&&
&re: java 调用webservice的各种方法总结
大家可以去这个网站看到更多关于Web Service的介绍:&&&&
&re: java 调用webservice的各种方法总结
新建 axis1.4的webservice作为服务端,webservice client工程最为客户端。&&&&
&re: java 调用webservice的各种方法总结
java webservice代码下载地址:&&&&
楼上楼下是**&&&&
&re: java 调用webservice的各种方法总结
不错,有demo就更好了&&&&
&re: java 调用webservice的各种方法总结
如何在java Web项目中开发WebService接口 &&&&
&re: java 调用webservice的各种方法总结
支持楼主&&&&
&re: java 调用webservice的各种方法总结
非常感谢博主分享,受益匪浅!多谢了&&&&
&re: java 调用webservice的各种方法总结
&re: java 调用webservice的各种方法总结[未登录]
service.xml在哪找?&&&&

我要回帖

更多关于 微信怎么查看主动添加 的文章

 

随机推荐