当前位置:首页 » 编程语言 » java调用服务

java调用服务

发布时间: 2022-06-24 18:24:33

java 怎样调用本地webservice

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

⑵ java如何调用webservice接口

Java通过WSDL文件来调用webservice:

注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。
1,直接AXIS调用远程的web service
这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:
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 = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用远程的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());
}
}
}
2,直接SOAP调用远程的webservice
这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;

import java.io.*;
import java.net.*;
import java.util.Vector;

public class caService{
public static String getService(String user) {
URL url = null;
try {
url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
} catch (MalformedURLException mue) {
return mue.getMessage();
}
// This is the main SOAP object
Call soapCall = new Call();
// Use SOAP encoding
soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
// This is the remote object we're asking for the price
soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
// This is the name of the method on the above object
soapCall.setMethodName("getUser");
// We need to send the ISBN number as an input parameter to the method
Vector soapParams = new Vector();

// name, type, value, encoding style
Parameter isbnParam = new Parameter("userName", String.class, user, null);
soapParams.addElement(isbnParam);
soapCall.setParams(soapParams);
try {
// Invoke the remote method on the object
Response soapResponse = soapCall.invoke(url,"");
// Check to see if there is an error, return "N/A"
if (soapResponse.generatedFault()) {
Fault fault = soapResponse.getFault();
String f = fault.getFaultString();
return f;
} else {
// read result
Parameter soapResult = soapResponse.getReturnValue ();
// get a string from the result
return soapResult.getValue().toString();
}
} catch (SOAPException se) {
return se.getMessage();
}
}
}
3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。
这是像我这种懒人最喜欢的方式,仍然以前面的global weather report为例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。
那么就会出现4个文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。

⑶ java客户端如何调用服务端的接口

如果你的data格式是{area:”xxx“,sourceType:”xxx“,factoryName:”xxxx“}这样子 在你的success方法里 通过data.area获取 area的值,以此类推

⑷ 求救Java怎么调用 net的webService

一. 使用axis1.x调用webservice方法
Axis的最常用版本:1.4和2.0版本。以下为1.4版本
核心代码:
// webserviceURL
service_url = "http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(service_url));
// 设置要调用的方法
// http://intelink.net/是wsdl中definitions根节点的targetNamespace属性值
call.setOperationName(new QName("http://intelink.net/","GetStrByJobno"));
// 该方法需要的参数
call.addParameter("CustNo",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("passwd",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter("Jobno",
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 方法的返回值类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
// call.setUseSOAPAction(true); //call.setSOAPActionURI("http://intelink.net/GetStrByJobno");
// 调用该方法, new Object[] { CustNo, passwd, Jobno}为参数列表
String xmlStr = call.invoke(new Object[] { CustNo, passwd, Jobno}).toString();
} catch (Exception e) {
e.printStackTrace();
}
JAVA用这种方式调用webservice,需要注意的地方:
1. 服务器未能识别 HTTP 标头 SOAPAction 的值:
症状一:
Web Service + ASP.NET 应用程序部署到服务器默认目录中,在IE中用http://<服务器地址>/<程序目录名>/<默认启动页面名>发生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误。
症状二:
在Java平台上调用.NET Web Service的服务时,出现"服务器未能识别 HTTP 标头 SOAPAction 的值"。
症状三:
在Java平台下调用.NET WEB Service,出现数据时有时无。

解决对策:

给.NET的WebService类(即.asmx文件下的类)添加属性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
小知识:
什么是SoapAction?它在WSDL中有何作用?
SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。

SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。

本人补充:
在.NET环境调用.NET WebService出现 “SOAPAction 值在 XML Web services 的所有方法中不唯一的错误”,也可以通过此法解决。

2. 为了Java能够调用WebService的方法,所以。NETP写的WebServiced的每个方法都要声明为Rpc方法,即添加"[SoapRpcMethod.....]".
例如:[WebMethod]
[SoapRpcMethod(Use=SoapBindingUse.Literal,Action= http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]

3. 对返回值、参数的处理上:
应尽量将webservice方法的返回值、参数都写成字符串(String)不要使用复杂对象类型,这样便于在网络上传输。避免了复杂对象类型的不易转换问题。。。对于返回类型是字符串数组型的,可以设置返回类型为org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class.

二.利用xfire调用WebService
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。

核心代码:
Service service = new ObjectServiceFactory().create(IWebservice.class);
XFireProxyFactory factory =
new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url= "http://localhost:8080/webservices/services/webservices";
IWebservice iw = (IWebservice) factory.create(service, url);
List list=iw.getTest();

⑸ java调用webservice接口具体怎么调用

Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。 1、编写代码方式: package com.yun.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("http://www.w3.org/2001/XMLSchema", "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("http://www.w3.org/2001/XMLSchema", "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("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false); param.setOmittable(true); oper.addParameter(param);

⑹ java之间如何调用服务呢急急急急

同一网络电脑A启动服务就行了

⑺ java中怎样调用service的方法

  1. 如果方法使static修饰的。直接:返回值(如果需要)=对象.方法(参数);

  2. 如果方法没有使static修饰的。直接:返回值(如果需要)=new 类().方法(参数);

⑻ 如何在Java客户端调用RESTful服务

如何在Java客户端调用RESTful服务
public static void main(String[] args) {
Store store = new Store();// 准备参数
// 首先创建一个webservice客户端,参数依次为:webservice的url, webservice的名称, webservice的方法, 参数列表, 返回类型, 泛型的类型(不需要泛型就传入null)
WebserviceClient client = new WebserviceClient(", "store", "find", new Object[] { store }, List.class, Store.class);
List<Store> list = client.execute();// 调用webservice
System.out.println("从服务器返回" + list.size() + "个商品");// 得到了服务端返回的数据
}

把里边链接和参数换掉

热点内容
保定编程家教 发布:2024-05-01 04:00:28 浏览:377
qq客户端源码 发布:2024-05-01 03:37:01 浏览:844
山西时间同步服务器云空间 发布:2024-05-01 03:27:20 浏览:549
iis运行php 发布:2024-05-01 03:12:22 浏览:179
linux字体下载 发布:2024-05-01 02:53:31 浏览:738
怎么查自己电脑配置跟型号 发布:2024-05-01 02:44:19 浏览:109
vps服务器adsl动态ip 发布:2024-05-01 02:15:49 浏览:779
python成员函数 发布:2024-05-01 01:26:03 浏览:377
编程猫小爱 发布:2024-05-01 01:25:18 浏览:32
pythonwhile 发布:2024-05-01 00:04:25 浏览:730