java调度webservice

JAVA怎样调用https类型的webservice

方法/步骤

一步按照Axis生成本地访问客户端,完成正常的webservice调用的开发,这里的细节我就不再描述,重点说明和http不同的地方-证书的生成和

使用。这里假设需要访问的网址是

,那么就需要生成网址的安全证书设置到系统属性中,并且需要在调用代码前。如下图

第二步就是介绍怎样生成证书,先写一个InstallCert.java类放到自己电脑的D盘根目录下,(注意这个类是没有包名的)类中代码如下:

/**

*

*/

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.security.KeyStore;

import java.security.MessageDigest;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLException;

import javax.net.ssl.SSLSocket;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.net.ssl.TrustManagerFactory;

import javax.net.ssl.X509TrustManager;

public class InstallCert {

public static void main(String[] args) throws Exception {

String host;

int port;

char[] passphrase;

if ((args.length == 1) || (args.length == 2)) {

String[] c = args[0].split(“:”);

host = c[0];

port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);

String p = (args.length == 1) ? “changeit” : args[1];

passphrase = p.toCharArray();

} else {

System.out

.println(“Usage: java InstallCert host[:port] [passphrase]”);

return;

}

File file = new File(“jssecacerts”);

if (file.isFile() == false) {

char SEP = File.separatorChar;

File dir = new File(System.getProperty(“java.home”) + SEP + “lib”

+ SEP + “security”);

file = new File(dir, “jssecacerts”);

if (file.isFile() == false) {

file = new File(dir, “cacerts”);

}

}

System.out.println(“Loading KeyStore ” + file + “…”);

InputStream in = new FileInputStream(file);

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

ks.load(in, passphrase);

in.close();

SSLContext context = SSLContext.getInstance(“TLS”);

TrustManagerFactory tmf = TrustManagerFactory

.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(ks);

X509TrustManager defaultTrustManager = (X509TrustManager) tmf

.getTrustManagers()[0];

SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);

context.init(null, new TrustManager[] { tm }, null);

SSLSocketFactory factory = context.getSocketFactory();

System.out

.println(“Opening connection to ” + host + “:” + port + “…”);

SSLSocket socket = (SSLSocket) factory.createSocket(host, port);

socket.setSoTimeout(10000);

try {

System.out.println(“Starting SSL handshake…”);

socket.startHandshake();

socket.close();

System.out.println();

System.out.println(“No errors, certificate is already trusted”);

} catch (SSLException e) {

System.out.println();

e.printStackTrace(System.out);

}

X509Certificate[] chain = tm.chain;

if (chain == null) {

System.out.println(“Could not obtain server certificate chain”);

return;

}

BufferedReader reader = new BufferedReader(new InputStreamReader(

System.in));

System.out.println();

System.out.println(“Server sent ” + chain.length + ” certificate(s):”);

System.out.println();

MessageDigest sha1 = MessageDigest.getInstance(“SHA1”);

MessageDigest md5 = MessageDigest.getInstance(“MD5”);

for (int i = 0; i chain.length; i++) {

X509Certificate cert = chain[i];

System.out.println(” ” + (i + 1) + ” Subject ”

+ cert.getSubjectDN());

System.out.println(” Issuer ” + cert.getIssuerDN());

sha1.update(cert.getEncoded());

System.out.println(” sha1 ” + toHexString(sha1.digest()));

md5.update(cert.getEncoded());

System.out.println(” md5 ” + toHexString(md5.digest()));

System.out.println();

}

System.out

.println(“Enter certificate to add to trusted keystore or ‘q’ to quit: [1]”);

String line = reader.readLine().trim();

int k;

try {

k = (line.length() == 0) ? 0 : Integer.parseInt(line) – 1;

} catch (NumberFormatException e) {

System.out.println(“KeyStore not changed”);

return;

}

X509Certificate cert = chain[k];

String alias = host + “-” + (k + 1);

ks.setCertificateEntry(alias, cert);

OutputStream out = new FileOutputStream(“jssecacerts”);

ks.store(out, passphrase);

out.close();

System.out.println();

System.out.println(cert);

System.out.println();

System.out

.println(“Added certificate to keystore ‘jssecacerts’ using alias ‘”

+ alias + “‘”);

}

private static final char[] HEXDIGITS = “0123456789abcdef”.toCharArray();

private static String toHexString(byte[] bytes) {

StringBuilder sb = new StringBuilder(bytes.length * 3);

for (int b : bytes) {

b = 0xff;

sb.append(HEXDIGITS[b 4]);

sb.append(HEXDIGITS[b 15]);

sb.append(‘ ‘);

}

return sb.toString();

}

private static class SavingTrustManager implements X509TrustManager {

private final X509TrustManager tm;

private X509Certificate[] chain;

SavingTrustManager(X509TrustManager tm) {

this.tm = tm;

}

public X509Certificate[] getAcceptedIssuers() {

throw new UnsupportedOperationException();

}

public void checkClientTrusted(X509Certificate[] chain, String authType)

throws CertificateException {

throw new UnsupportedOperationException();

}

public void checkServerTrusted(X509Certificate[] chain, String authType)

throws CertificateException {

this.chain = chain;

tm.checkServerTrusted(chain, authType);

}

}

}

将上面的InstallCert.java编译成InstallCert.class文件放到自己电脑的D盘根目录下。这是正常的情况下D盘根目录下会有3个文件,

打开cmd进入到d盘开始执行生成证书命令,我这里不便于那我的网址测试我用支付宝的网址来测试的,输入:java InstallCert

当出现了:Enter certificate to add to trusted keystore or ‘q’ to quit: [1]

这行代码时,输入1,回车。正常执行完后在D盘根目录下就会出现证书“jssecacerts”文件,

得到证书后将证书拷贝到$JAVA_HOME/jre/lib/security目录下,我这里是win7系统,在尝试的过程中需要将证书重命名为:cacerts 放进去才会有用。(这个步骤在不同的环境和操作系统下有点不同,需要注意)

如何用java调用cxf webservice接口

WebService CXF客户端报 java.lang.RuntimeException: Cannot create a secure XMLInputFactory 异常,查了许多网络关于该问题的解决办法,很多都说缺少包问题,但问题是我的包都存在,我用的是apache-cxf-2.7.6,经过不懈努力终于解决了,我的服务端用的是web project,客户端用的是java project,客户端jar包是引用其它地方的,后来建一个web project客户端,把jar直接复制到project的lib目录下就行了,jdk用的是1.7,客户端依赖的接口用wsdl2java生成的。

java调度webservice

java如何调用webservice接口

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。

1、编写代码方式:

package com.yudun.test;

import java.rmi.RemoteException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.message.PrefixedQName;

import org.apache.axis.message.SOAPHeaderElement;

import com.cezanne.golden.user.Exception;

import com.cezanne.golden.user.UserManagerServiceProxy;

import javax.xml.namespace.QName;

import java.net.MalformedURLException;

import javax.xml.rpc.ServiceException;

import javax.xml.soap.Name;

import javax.xml.soap.SOAPException;

public class testWebService {

public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException

{

//标识Web Service的具体路径

String endpoint = “WebService服务地址”;

// 创建 Service实例

Service service = new Service();

// 通过Service实例创建Call的实例

Call call = (Call) service.createCall();

//将Web Service的服务路径加入到call实例之中.

call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置

// 由于需要认证,故需要设置调用的SOAP头信息。

Name headerName = new PrefixedQName( new QName(“发布的wsdl里的targetNamespace里的url”, “string_itemName”) );

org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);

header.addTextNode( “blablabla” );

call.addHeader(header);

// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(“发布的wsdl里的targetNamespace里的url”, “SoapHeader”);

// soapHeaderElement.setNamespaceURI(“发布的wsdl里的targetNamespace里的url”);

// try

// {

// soapHeaderElement.addChildElement(“string_itemName”).setValue(“blablabla”);

// }

// catch (SOAPException e)

// {

// e.printStackTrace();

// }

// call.addHeader(soapHeaderElement);

//调用Web Service的方法

org.apache.axis.description.OperationDesc oper;

org.apache.axis.description.ParameterDesc param;

oper = new org.apache.axis.description.OperationDesc();

oper.setName(“opName”);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg0”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg1”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName(“”, “arg2”), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(“”, “string”), java.lang.String.class, false, false);

param.setOmittable(true);

oper.addParameter(param);

oper.setReturnType(new javax.xml.namespace.QName(“”, “string”));

oper.setReturnClass(java.lang.String.class);

oper.setReturnQName(new javax.xml.namespace.QName(“”, “return”));

oper.setStyle(org.apache.axis.constants.Style.WRAPPED);

oper.setUse(org.apache.axis.constants.Use.LITERAL);

oper.addFault(new org.apache.axis.description.FaultDesc(

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

“Exception”,

new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “Exception”),

true

));

call.setOperation( oper );

call.setOperationName(new javax.xml.namespace.QName(“发布的wsdl里的targetNamespace里的url”, “opName”));

//调用Web Service,传入参数

String res = ( String ) call.invoke( new Object[](“arg0″,”arg1”));

System.out.println(“===============”);

return res;

}

/**

* @param args

*/

public static void main(String[] args) {

try {

System.out.println(getResult());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

} catch (ServiceException e) {

e.printStackTrace();

} catch (SOAPException e) {

e.printStackTrace();

}

}

}

2、利用Eclipse自动生成WebService client代码就容易多了:(由于还不会发图片,就用语言描述了,大家酬和看吧。。。)

首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish

这样,WebService Client代码已经生成好了。

接下来写一个Test类,在main函数中输入如下代码:

String endpoint = “服务器的WebService的地址”;

YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);

try {

String resultStr = umsp.opMethod(“arg0″,”arg1”);

System.out.println(resultStr);

} catch (Exception e) {

System.out.println(“异常”);

e.printStackTrace();

} catch (RemoteException e) {

System.out.println(“RemoteException异常”);

e.printStackTrace();

}

如果还有疑问的话还有视频,如果对你有帮助请采纳!

webservice java怎么调用

WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用。WebService采用HTTP协议传输数据,采用XML格式封装数据,SOAP协议=HTTP协议+XML数据格式。主要解决不了不同的系统或者调用分布部署的处理数据项目返回的接口。第一种,采用httpclient请求,这种跟经常用的HTTP请求一样,结果可以是返回XML格式的字符串,比较容易对其进行解析,取得想要的数据。

java如何调用webservice接口?

Java通过WSDL文件来调用webservice直接调用模式如下:

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;

public class caClient {

public static void main(String[] args) {

try {

String endpoint = “”;

//直接引用远程的wsdl文件

//以下都是套路

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(endpoint);

call.setOperationName(“addUser”);//WSDL里面描述的接口名称

call.addParameter(“userName”, org.apache.axis.encoding.XMLType.XSD_DATE,

javax.xml.rpc.ParameterMode.IN);//接口的参数

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型

String temp = “测试人员”;

String result = (String)call.invoke(new Object[]{temp});

//给方法传递参数,并且调用方法

System.out.println(“result is “+result);

}

catch (Exception e) {

System.err.println(e.toString());

}

}

}

java调用webservice

String endpoint=””;

String id = “11111”;

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(endpoint));

call.setOperationName(“webservice方法名”);

String res = (String) call.invoke(new Object[] {id});

看了你的描述觉得你把webservice想得太复杂化了,其实就是一个jar包和几个类。

以上就是最简单的webservice客户端用法,和反射有点像。当然返回值不一定是String,返回的类型和格式要问服务提供方。

我用的是axis的,我不了解websphere什么的,但是webservice就是那么易用的东西。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 06:11:01
下一篇 2024年3月26日 06:20:14

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4300
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4200
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    4000
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4800
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信