「java调用soap接口」soap服务调用
今天给各位分享java调用soap接口的知识,其中也会对soap服务调用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java如何调用webservice接口
- 2、java怎么调用domino中soap编码格式为doc/原意的webservice
- 3、java调用webservice接口具体怎么调用
- 4、java怎么用soap的方式访问一个接口?
- 5、java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题
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();
}
如果还有疑问的话还有视频,如果对你有帮助请采纳!
java怎么调用domino中soap编码格式为doc/原意的webservice
所用到的java知识就是URL、URLConnection、HttpURLConnection三个对象,本站很多博客中有详细介绍它们的使用,我这里就不多说了。下面介绍如何访问Webservice:
首先在Domino中发布一简单的Webservice,可以从IBM官网文章中找到学习的例子,如下在Designer中使用Java编写简单Webservice(这里不详细介绍如何创建/发布Websercive):DatabaseInfo 提供一接口getUserRolesArray,通过NotesID返回其拥有的所有角色名称。
Java代码
import lotus.domino.*;
import lotus.domino.types.*;
import java.util.Vector;
public class DatabaseInfo {
private Session session;
private AgentContext agentContext;
private Database db;
public DatabaseInfo () throws Exception {
session = WebServiceBase.getCurrentSession();
agentContext = session.getAgentContext();
db = agentContext.getCurrentDatabase();
}
public String[] getUserRolesArray (String userName) throws Exception {
Document doc = agentContext.getDocumentContext();
Vector v = getRoles(userName);
return (String[])v.toArray(new String[1]);
}
//获取账号拥有的角色名称
private Vector getRoles (String userName) throws Exception {
ACL acl = db.getACL();
ACLEntry entry = acl.getEntry(userName);
if (entry == null) {
return new Vector();
} else {
return entry.getRoles();
}
}
}
其次在Designer中创建一java脚本库,用于连接、发送Soap请求、返回结果的类:WebServiceClient 提供连接方法openWSDLURL,发送Soap请求并返回结果的方法sendSOAPRequest等
最后在Designer中创建一代理,可以使用java编写代理,也可以使用Lotusscript编写代理,下面以Lotusscript编写代理,调用上面编写java类访问Websercive(用java编写代理也可以直接调用)。
详细代码设计无法直接贴在上面,以附件方式上传,请见附件。
调试过程中可以通过SoapUI(最新版SoapUI3.6)测试Webservice接口,查看其调用Webserivce时发送的Soap请求(包括header、body等信息)。
java调用webservice接口具体怎么调用
使用HttpClient
用到的jar文件:commons-httpclient-3.1.jar
方法:
预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。
String soapRequestData = "?xml version=\"1.0\" encoding=\"utf-8\"?" +
"soap12:Envelope xmlns:xsi=\"\" xmlns:xsd=\"\" xmlns:soap12=\"\"" +
"soap12:Body" +
" getCountryCityByIp xmlns=\"\"" +
" theIpAddress219.137.167.157/theIpAddress" +
" /getCountryCityByIp" +
" /soap12:Body" +
"/soap12:Envelope";
然后定义一个PostMethod,这时需要指定web服务的Url;
PostMethod postMethod = new PostMethod(“”);
然后把Soap请求数据添加到PostMethod中
byte[] b = soapRequestData.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b,0,b.length);
RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re);
最后生成一个HttpClient对象,并发出postMethod请求
HttpClient httpClient = new HttpClient();
statusCode = httpClient.executeMethod(postMethod);
String soapRequestData = postMethod.getResponseBodyAsString();
soapRequestData就是调用web服务的Soap响应数据,是xml格式的,可以通过解析soapRequestData来获得调用web服务的返回值。
java怎么用soap的方式访问一个接口?
我之前写的一个实验是soap机制的,你看可以么,以下是实验内容
Web service 其运作原理如下 (下图引用官方网站简介):
+--------------------------------------+
web service registry
(aka service broker)
(UDDI)
+--------------------------------------+
^ ^
(2) (1)
(the client (the web service
WSDL finds the WSDL provider publishes
service the web service)
they want)
v v
+-----------+ +-----------+
service --soap-- service
requestor provider
+-----------+ (3) +-----------+
(1) 发布 Web Service.
(2) 寻找已发布的 Web Service.
(3) 通过 SOAP 互相沟通.
(1) 及 (2) 均为 optional.
WSDL -- Web Services description Language. WSDL 描述 web service 的功能.
UDDI -- Universal Description, Discovery and Integration. 发布 web service 的协定.
SOAP -- Simple Object Access Protocol. SOAP 通过 HTTP 传送 XML message.
java使用HTTPURLCONNECTION调用SOAP接口如何处理返回参数过大的问题
试试下面两种思路
可以分批次请求,一次返回一部分。 一般来说10M以内都是可以接受
服务器端返回一个文件,客户端直接接受文件。(这里接受文件肯定要用流的形式,不能用byte数组)
java调用soap接口的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于soap服务调用、java调用soap接口的信息别忘了在本站进行查找喔。
发布于:2022-12-05,除非注明,否则均为
原创文章,转载请注明出处。