-
2021-03-22 13:13:25
Webservice是系统对外的接口,比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
附件是使用Axis编写WebService的例子,本例子的WebService提供了两个方法,分别是sayHello和sayHelloToPerson,第一个只是返回一个"Hello"字符串,没有参数,第二个函数接受一个字符串作为参数,返回"Hello 参数值",该例子比较简单,但是清楚的说明了从编写代码到发布为WebService以及测试编写好的WebService全过程。
以下是操作步骤:
1、编写服务代码
服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,在HelloService.java类中
2、发布WebService
要将上边写的HelloService类发布为WebService,需要先搭建Web应用。下面是在Tomcat下使用Axis创建WebService服务的例子。
3、在Tomcat下创建Web应用
在该例子中,在Tomcat下创建了一个context path为test_webservice的WEB应用。
(1) 在Tomcat的webapps下创建如下文件系统
test_webservice
WEB-INF
lib
Classes
(2)在WEB-INF文件夹下创建web.xml文件,在web.xml中主要是配置axis。
4、复制axis相关的jar文件
将axis的相关jar文件复制到WEB-INF\lib文件夹下。这些文件包括:
activation.jar
axis.jar
axis-ant.jar
axis-schema.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
mailapi.jar
saaj.jar
wsdl4j-1.5.1.jar
xmlsec-1.3.0.jar
5、测试发布的WEB应用
启动Tomcat服务,打开IE浏览器,访问http:host:port/test_webservice/services,
如果看到如下界面就说明AXIS部署成功了。
6、发布WebService
发布WebService需要使用现有的AdminService来实现,这里我写了一个批处理文件来发布WebService,以后如果需要发布其他文件,只需要修改相应的参数就可以了。
(1)创建deploy.wsdd文件。
(2)创建发布WebService服务的批处理文件deploywebservice.bat。
其中E:\workspace\Libwebservice是存放axis对应的jar文件的文件夹,现在将所有的jar文件都加入到此文件夹中。
-l后的参数是本地要发布WebService的AdminService对应的访问地址。
最后deploy.wsdd是对应的配置文件名称。
(3) 将deploy.wsdd文件和deploywebservice.bat文件复制到同一个文件夹下,执行deploywebservice.bat批处理文件,就可以将deploy.wsdd中描述的Java类发布为WebService。发布完成之后再访问http://host:port/test_webservice/services
从上图可以看出,发布成功后,多了一个HelloServices的服务。这样就说明HelloService发布成功了。
7、查看HelloServices的wsdl
更多相关内容 -
php的webservice的wsdl的XML无法显示问题的解决方法
2020-12-18 20:32:20您可能感兴趣的文章:JAVA如何调用wsdl过程详解java WSDL接口webService实现方式PHP调用wsdl文件类型的接口代码分享解析利用wsdl.exe生成webservice代理类的详解在PHP中利用wsdl创建标准webservice的实现代码Java... -
调用webservice接口发送xml格式的数据
2021-07-18 15:03:35方法里的四个参数:1.xml拼的数据,2调用接口方法 ,3.操作类型,4.业务编码,这个要看自己开发文档具体要求 5.返回结果进行解析判断 //System.out.println(ret); SAXReader reader = new SAXReader(); Document ...工作要求做的是定时任务,定时推送数据
1.maven里引入依赖
<dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-discovery</groupId> <artifactId>commons-discovery</artifactId> <version>0.2</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis-jaxrpc</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis-saaj</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.4</version> </dependency>
2.发送数据的类
import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.encoding.XMLType; public class HttpPost { /** * 广联达接口调用工具 * post请求,参数为application/x-www-form-urlencoded 编码格式提交 * @return 响应 */ public String postTran(String xml,String action,String opType,String moduleCode){ Object[] params = new Object[]{"123qwe)(*&^54321",moduleCode,xml,opType}; String url="http://xx.xx.xx:8788/GEPS/Integration/WebService/HZCJIntegrationService.asmx"; String result = sendWebservice(params,url); System.out.println(result); return result; } public String sendWebservice(Object[] params, String url) { String soapaction = "http://tempuri.org/"; // 域名,这是在server定义的 String operationName = "SyncBill";// 调用方法名 Service service = new Service(); String ret = ""; try { Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new QName(soapaction, operationName)); // 设置要调用哪个方法 call.addParameter(new QName(soapaction, "key"), // 设置要传递的参数 XMLType.XSD_STRING, ParameterMode.IN); call.addParameter(new QName(soapaction, "moduleCode"), // 设置要传递的参数 XMLType.XSD_STRING,ParameterMode.IN); call.addParameter(new QName(soapaction, "strData"), // 设置要传递的参数 XMLType.XSD_STRING,ParameterMode.IN); call.addParameter(new QName(soapaction, "opType"), // 设置要传递的参数 XMLType.XSD_STRING,ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING);// (标准的类型) call.setUseSOAPAction(true); call.setSOAPActionURI(soapaction + operationName); call.setUseSOAPAction(true); call.setSOAPActionURI(soapaction + operationName); ret = (String) call.invoke(params);// 调用方法并传递参数 } catch (Exception ex) { ex.printStackTrace(); } return ret; } }
3.把要推送的数据用document,进行拼装
// 获取变更后的人员列表 List<BdPsndoc> psndocList = iBdPsndocService.getSelect(); System.out.println(psndocList+"1111"); //System.out.println(psndocList); if(psndocList!=null&&!psndocList.isEmpty()){ // 遍历 for (BdPsndoc asyncBdPsndoc:psndocList) { // 数据拼接成xml Document document1 = DocumentHelper.createDocument(); document1.addComment("用户USER"); // 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错 Element root = document1.addElement("bill"); // 添加注释 root.addComment("用户USER"); // 根节点下添加节点 Element billDetail = root.addElement("billDetail"); // 添加注释 billDetail.addComment("用户姓名 必填"); Element name = billDetail.addElement("name"); name.setText(xmlNull.replaceNullString(asyncBdPsndoc.getName())); billDetail.addComment("登录账号 必填"); Element code1 = billDetail.addElement("code"); code1.setText(xmlNull.replaceNullString(asyncBdPsndoc.getCode())); billDetail.addComment("用户性别"); Element gender = billDetail.addElement("gender"); gender.setText(xmlNull.replaceNullString(asyncBdPsndoc.getGender())); billDetail.addComment("来源平台主键"); Element sourcePlatForm = billDetail.addElement("sourcePlatForm"); sourcePlatForm.setText(xmlNull.replaceNullString(asyncBdPsndoc.getSourceplatform()));
这里每个节点设置内容的时候有时候没有值,可以这么做
写了个方法,可以用这个方法去处理下传的参数
public String replaceNullString(String str){ if(str == null ) return ""; else return str; }
4.发送数据
//建立发送xml的组成内容 HttpPost h = new HttpPost(); //发送xml返回结果 String ret =h.postTran(document1.asXML().trim(),"SyncBill","Add","USER"); System.out.println("发送xml返回结果" +ret.toString());
方法里的四个参数:1.xml拼的数据,2调用接口方法 ,3.操作类型,4.业务编码,这个要看自己开发文档具体要求
5.返回结果进行解析判断
//System.out.println(ret); SAXReader reader = new SAXReader(); Document document2 = reader.read(new ByteArrayInputStream(ret.getBytes("UTF-8"))); Element bookStore = document2.getRootElement(); // 通过element对象的elementIterator方法获取迭代器 Iterator it = bookStore.elementIterator(); // 遍历迭代器,获取根节点中的信息(书籍) String code = ""; while (it.hasNext()) { Element book = (Element) it.next(); // 获取book的属性名以及 属性值 List<Attribute> bookAttrs = book.attributes(); for (Attribute attr : bookAttrs) { if(attr.getName().equals("resultCode")){ code = attr.getValue(); } System.out.println("属性名:" + attr.getName() + "--属性值:" + attr.getValue()); } } // 对方处理失败,记录日志 if("1".equals(code)){ MyLog resLog = logService.getSuccessLog( "org.jeecg.modules.basedoc.psndoc.job.PsnDocNCtoPMJob.execute", "定时任务:人员档案 到PM"); resLog.setNote("发送成功"); resLog.setInData(JSON.toJSONString(asyncBdPsndoc)); resLog.setOutData(ret); resLog.setUrl(GlobalParams.NC_TO_PM_PSNDOC); iBdPsndocService.removeById(asyncBdPsndoc.getId()); logService.save(resLog); }else if ("-1".equals(code)){ MyLog resLog = logService.getFailLog( "org.jeecg.modules.basedoc.psndoc.job.PsnDocNCtoPMJob.execute", "定时任务:人员档案 到PM" ); resLog.setNote("发送失败"); resLog.setInData(JSON.toJSONString(asyncBdPsndoc)); resLog.setOutData(ret); resLog.setUrl(GlobalParams.NC_TO_PM_PSNDOC); logService.save(resLog); }
到这里完整的发送xmL,解析结果就完成了,第一次用,记录下
-
WEBservice实战开发视频教程
2019-07-22 21:28:31WEBservice实战开发视频教程 教程内容:第一期:01_webservice快速实例02_wsimport的使用03_wsdl和soap讲解(介入了tcpmon工具)04_SOA的分析(纯属扯淡)05_dtd讲解06_schema的命名空间07_schema的元素和属性的定义... -
webservice接口开发obj2xml.zip
2019-12-31 16:26:23webservice接口开发,常常需要进行对象与xml的相互转换,使用commons-betwixt-0.8.jar 是比较好的选择,现在提供示例代码 -
C#开发webservice接口,对客户端post服务的Json数据进行接收反馈
2019-01-18 14:22:00C#开发webservice接口,对客户端post服务的Json数据进行接收反馈 接收到的数据流转换成string类型,有其他需求对json解析,自己写个解析去查询下. 然后反馈json发送给请求端。 -
我的第一次WebService接口开发教程
2021-08-07 19:24:47工作中,接触到很多系统要互相对接,因为大多数公司(项目)所用的平台不同,要想一方提供数据信息供对方提取,首先想到的就是开放出一个WebService接口调用文档和WebService地址,这样对方就能根据文档地址编程去...一、前言:
工作中,接触到很多系统要互相对接,因为大多数公司(项目)所用的平台不同,要想一方提供数据信息供对方提取,首先想到的就是开放出一个WebService接口调用文档和WebService地址,这样对方就能根据文档地址编程去调用。于是便在网上搜罗相关资料,尝试写一个WebService接口,非科班出身,仅供大家参考、指教。
二、WebService优点:
- 可远程调用(WebService可以向全世界提供信息,或提供某项功能,只要有网就OK)。
- 跨平台调用(WebService可以在Windows上调用linux上的WebService服务,反之同理)。
- 跨语言调用(WebService可以在Java语言中调用asp.net语言提供的WebService服务,反之其他编程语言同理)
- ......
三、详细开发步骤:
1)使用JDK开发WebService
WebService服务端
1.1首先我们先创建一个java项目,目录及Util工具类和所应用的包:
这里我用的是 C3p0 JDBC连接池方式我给大家提供MySql和oracle工具类,代码如下:
MySql:
package Util; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCUtil2 { static ComboPooledDataSource dataSource = null; static{ dataSource = new ComboPooledDataSource(); } public static DataSource getDataSource(){ return dataSource; } /** * 获取连接对象 * @return * @throws SQLException */ public static Connection getConn() throws SQLException{ return dataSource.getConnection(); } /** * 释放资源 * @param conn * @param st * @param rs */ public static void release(Connection conn , Statement st , ResultSet rs){ closeRs(rs); closeSt(st); closeConn(conn); } public static void release(Connection conn , Statement st){ closeSt(st); closeConn(conn); } private static void closeRs(ResultSet rs){ try { if(rs != null){ rs.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ rs = null; } } private static void closeSt(Statement st){ try { if(st != null){ st.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ st = null; } } private static void closeConn(Connection conn){ try { if(conn != null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ conn = null; } } public static void main(String[] args) throws Exception{ System.out.println(getConn()); System.out.println("---------------------------南清风工具类测试-------------------------------"); System.out.println("+++++++++++++++++++MySql Connection Successful!+++++++++++++++++++++"); System.out.println("---------------------------------------------------------------------"); } }
Oracle:
package Util; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCUtil { private static ComboPooledDataSource ds = new ComboPooledDataSource(); private static ThreadLocal<Connection> tl=new ThreadLocal<>(); /** * 从线程中获取连接 * @return * @throws SQLException */ public static Connection getConnection() throws SQLException { //从线程中获取conneciton Connection conn = tl.get(); if(conn==null){ conn=ds.getConnection(); //和当前线程绑定 tl.set(conn); } return conn; } // 获取数据源 public static DataSource getDataSource() { return ds; } // 释放资源 public static void closeResource( Statement st, ResultSet rs) { closeResultSet(rs); closeStatement(st); } // 释放资源 public static void closeResource(Connection conn, Statement st, ResultSet rs) { closeResource(st, rs); closeConn(conn); } // 释放 connection public static void closeConn(Connection conn) { if (conn != null) { try { conn.close(); //和线程解绑 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } // 释放 statement ctrl + shift + f 格式化代码 public static void closeStatement(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } st = null; } } // 释放结果集 public static void closeResultSet(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } //开启事务 public static void startTransaction() throws SQLException{ getConnection().setAutoCommit(false); } /** * 事务提交且释放连接 */ public static void commitAndClose(){ Connection conn = null; try { conn=getConnection(); //事务提交 conn.commit(); //关闭资源 conn.close(); //解除版定 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } /** * 事务回滚且释放资源 */ public static void rollbackAndClose(){ Connection conn = null; try { conn=getConnection(); //事务回滚 conn.rollback(); //关闭资源 conn.close(); //解除版定 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ System.out.println(getConnection()); System.out.println("---------------------------南清风工具类测试-------------------------------"); System.out.println("+++++++++++++++++++Oracle Connection Successful!+++++++++++++++++++++"); System.out.println("---------------------------------------------------------------------"); } }
1.2我们现在需要写一个接口类、封装对象类、实现类和拦截器,代码如下:
接口类:
package Dao; import java.sql.SQLException; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface fwsyq { @WebMethod() String Get_fwsyq( @WebParam(name="cxtj",targetNamespace = "http://Dao.Get_fwsyq_impl.Get_fwsyq")String cxtj, @WebParam(name="cxnr",targetNamespace = "http://Dao.Get_fwsyq_impl.Get_fwsyq")String cxnr) throws SQLException; }
Bean封装类:
package Bean; public class fwsyq_table2 { private int id; private String SLID; private String DJYY; private String DYH; private String QLR; private String BH; private String ZH; private float JZMJ; private String FDZL; private String XZ; private String DJSJ; private String djbzt; public fwsyq_table2() { super(); } public fwsyq_table2(int id, String sLID, String dJYY, String dYH, String qLR, String bH, String zH, float jZMJ, String fDZL, String xZ, String dJSJ, String djbzt) { this.id = id; SLID = sLID; DJYY = dJYY; DYH = dYH; QLR = qLR; BH = bH; ZH = zH; JZMJ = jZMJ; FDZL = fDZL; XZ = xZ; DJSJ = dJSJ; this.djbzt = djbzt; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSLID() { return SLID; } public void setSLID(String sLID) { SLID = sLID; } public String getDJYY() { return DJYY; } public void setDJYY(String dJYY) { DJYY = dJYY; } public String getDYH() { return DYH; } public void setDYH(String dYH) { DYH = dYH; } public String getQLR() { return QLR; } public void setQLR(String qLR) { QLR = qLR; } public String getBH() { return BH; } public void setBH(String bH) { BH = bH; } public String getZH() { return ZH; } public void setZH(String zH) { ZH = zH; } public float getJZMJ() { return JZMJ; } public void setJZMJ(float jZMJ) { JZMJ = jZMJ; } public String getFDZL() { return FDZL; } public void setFDZL(String fDZL) { FDZL = fDZL; } public String getXZ() { return XZ; } public void setXZ(String xZ) { XZ = xZ; } public String getDJSJ() { return DJSJ; } public void setDJSJ(String dJSJ) { DJSJ = dJSJ; } public String getDjbzt() { return djbzt; } public void setDjbzt(String djbzt) { this.djbzt = djbzt; } @Override public String toString() { return "fwsyq_table2 [id=" + id + ", SLID=" + SLID + ", DJYY=" + DJYY + ", DYH=" + DYH + ", QLR=" + QLR + ", BH=" + BH + ", ZH=" + ZH + ", JZMJ=" + JZMJ + ", FDZL=" + FDZL + ", XZ=" + XZ + ", DJSJ=" + DJSJ + ", djbzt=" + djbzt + "]"; } }
接口实现类:
package Dao; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import Bean.fwsyq_table; import Util.JDBCUtil2; import net.sf.json.JSONArray; public class Get_fwsyq_impl implements fwsyq { @Override public String Get_fwsyq(String cxtj, String cxnr) { try { QueryRunner qr = new QueryRunner(JDBCUtil2.getDataSource());if(cxtj!=null && cxnr!=null){ String sql="select id,slid,djyy,dyh,qlr,bh,zh,jzmj,fdzl,xz,djsj,djbzt from bqh_fq1 where "+cxtj+"="+"'"+cxnr+"'" +"order by id"; String sql1="select count(*) from bqh_fq1 where "+cxtj+"="+"'"+cxnr+"'"; List<fwsyq_table> data = qr.query(sql, new BeanListHandler<fwsyq_table>(fwsyq_table.class)); Long total=(Long) qr.query(sql1, new ScalarHandler()); //统计查询总数 System.out.println("来自客户端接口访问:查询成功!"); int count=total.intValue(); int code=0; String msg="\"查询成功\""; String json1="{\"code\":"+code+",\"msg\":"+msg+",\"count\":"+count+",\"data\":"+JSONArray.fromObject(data).toString()+"}"; System.out.println(json1); return json1; }else { List<fwsyq_table> data =null; System.out.println("来自客户端接口访问:查询失败!"); int code=4; int count=0; String msg="\"查询失败\""; String json1="{\"code\":"+code+",\"msg\":"+msg+",\"count\":"+count+",\"data\":"+JSONArray.fromObject(data).toString()+"}"; return json1; } } catch (Exception e) { e.printStackTrace(); } return null; } }
1.3使用Endpoint类发布WebService
package Publish_interface; import javax.xml.ws.Endpoint; import Dao.Get_fwsyq_impl; public class Get_FWSYQ { public static void main(String[] args){ //发布接口地址 String address="http://192.168.0.188:9999/BDBDCDJ/Get_fwsyq"; //jdk方法实现 Endpoint.publish(address, new Get_fwsyq_impl()); System.out.println("Published successfully!"); } }
1.4启动main方法运行这个类,打印出结果Published successfully,表示服务发布成功:
1.5打开浏览器,访问我们发布的地址(注意后面得加?wsdl),大家可以看到这样的效果:
WSDL结构描述:
1.6我们可以用SoaoUI工具来测试一下接口:
OK,这样一个简单的WebService接口就OK了。
2)使用CXF开发WebService
cxf是java开发webService的一种实现框架技术。目前,cxf是主流的webService实现框架。
2.1使用cxf开发需引入cxf开发jar包
Jetty是一个内嵌的web服务器,使用JaxWsServerFactoryBean类创建工厂设置接口地址、接口类、接口实现类,创建即可发布。所以我们得引入jetty包,作为WebService发布的Server。
2.2增加一个拦截器:
package Interceptor; import java.util.List; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; public class MyInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ public MyInterceptor(){ // 在调用方法之前调用拦截器 super(Phase.PRE_INVOKE); } /** * 拦截获取消息 */ public void handleMessage(SoapMessage message) throws Fault { Object obj = message.getContent(List.class).get(0); System.out.println("参数1:"+obj); Object obj1 = message.getContent(List.class).get(1); System.out.println("参数2:"+obj1); if(!obj.equals("slid") || obj1==null){ throw new Fault(new IllegalArgumentException("参数1错误,请求失败")); } if(obj1==null || obj1.equals("")){ throw new Fault(new IllegalArgumentException("参数2为空,请求失败")); } } }
2.3使用jaws发布WebService
package Publish_interface; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import Dao.Get_fwsyq_impl; import Dao.fwsyq; import Interceptor.MyInterceptor; public class CXF_Get_FWSYQ { public static void main(String[] args) { //1.使用jaws发布webservice JaxWsServerFactoryBean jsfb=new JaxWsServerFactoryBean(); //2.设置发布服务的地址 jsfb.setAddress("http://192.168.0.188:9999/BDBDCDJ/Get_fwsyq"); //3.设置接口服务 jsfb.setServiceClass(fwsyq.class); //4.设置服务的实现对象 jsfb.setServiceBean(new Get_fwsyq_impl()); jsfb.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器 jsfb.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 //添加自定义拦截器 jsfb.getInInterceptors().add(new MyInterceptor()); //5.通过工厂创建服务 jsfb.create(); System.out.println("Published successfully!"); } }
2.4启动main方法运行这个类,打印出结果Cxfweb service published successfully,表示服务发布成功:
2.5打开浏览器,访问我们发布的地址(注意后面得加?wsdl),大家可以看到这样的效果:
2.6我们可以用Postman工具来测试一下接口:
上边验证拦截器是否生效,下边正常填写参数,成功返回查询结果:
四、客户端调用接口:
3.1 新建一个客户端java web项目
3.2 java自带wsimport命令生成webservice客户端代码及服务调用
通过wsimport命令生成客户端代码(通过cmd进入到当前项目的src路径下,wsimport.exe命令在jdk的bin目录下)
- 第一种方式【远程地址】wsimport -s . 接口地址(加?wsdl)
- 第二种方式【xml文件】wsimport -s . 文件路径(文件路径后面不需要加?wsdl)
wsimport -s . http://192.168.0.188:9999/BDBDCDJ/Get_fwsyq?wsdl
我们在看一下客户端项目:刷新一下如下:
3.3新建一个测试类,调用一下接口方法:
package Test_client; import dao.Fwsyq; import dao.FwsyqService; public class Test_class { public static void main(String[] args) throws Exception { //构建服务视图对象(从service标签name属性获取) FwsyqService service=new FwsyqService(); //获取服务的实现类(从portType的name属性获取 Fwsyq prot=service.getPort(Fwsyq.class); //调用方法(portType下的operation属性获取 String info=prot.getFwsyq("slid", "202106070001"); System.out.println("调用服务端接口方法结果是:"+info); } }
3.4运行测试类结果如下:
Client console:
server console::
OK!一个基本的接口开发过程到此结束。
- 感谢大家的耐心阅读,如有建议请私信或评论留言。
- 如有收获,劳烦支持,关注、点赞、评论、收藏均可,与大家共同进步。
参考地址:
-
php中创建和调用webservice接口示例
2020-12-18 17:39:07WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的... -
C#调用WebService实例开发
2020-12-26 02:47:15Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI... -
axis传xml到webService接口并解析传回的xml
2021-07-30 13:49:56axis传xml到webService接口并解析传回的xml 最近开发项目中碰到需要对接webservice接口,以前没怎么接触过,翻百度都没找出可以调通的测试demo,之前使用httpClient去链接,但是没有成功,最终使用axis包的方法测试...axis传xml到webService接口并解析传回的xml
**//调整格式//
最近开发项目中碰到需要对接webservice接口,以前没怎么接触过,翻百度都没找出可以调通的测试demo,之前使用httpClient去链接,但是没有成功,最终使用axis包的方法测试通过。
我用的项目是gradle项目。
需要的包的地址可以通过这个地址获得:
MavenRepository
需要的包如下:implementation group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1' // https://mvnrepository.com/artifact/commons-configuration/commons-configuration implementation group: 'commons-configuration', name: 'commons-configuration', version: '1.10' compile group: 'org.apache.cxf', name: 'cxf-spring-boot-starter-jaxws', version: '3.3.4' // https://mvnrepository.com/artifact/com.adobe.flex.framework/rpc // https://mvnrepository.com/artifact/com.aliyun/tea-rpc implementation group: 'com.aliyun', name: 'tea-rpc', version: '0.1.2' // https://mvnrepository.com/artifact/wsdl4j/wsdl4j implementation group: 'wsdl4j', name: 'wsdl4j', version: '1.6.2' // https://mvnrepository.com/artifact/org.apache.axis/axis implementation group: 'org.apache.axis', name: 'axis', version: '1.4' // https://mvnrepository.com/artifact/axis/axis-jaxrpc implementation group: 'axis', name: 'axis-jaxrpc', version: '1.4' // https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream implementation group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.17' // https://mvnrepository.com/artifact/axis/axis-saaj implementation group: 'axis', name: 'axis-saaj', version: '1.4' implementation group: 'commons-discovery', name: 'commons-discovery', version: '0.2'
application.yml的配置配置werService地址和参数:
esb是我建的实体,ENDPOINT:是我的接口地址
NAMESPACE:这是名称空间
METHOD_NAME:这是方法的名称
SERVICE_CODE_PARAM_NAME:参数1
XML_REQ_PARAM_NAME:参数2
这是我的webservice打开后的页面:
具体我也没过多去研究,只知道指出的地方为我需要传的参数,我标出来的一个是名称空间一个是方法名称,这几个是我有用到的。实体的定义:
这是service接口:
返回的是我建的返回的实体,用来解析xml的
import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; import com.thoughtworks.xstream.annotations.XStreamAlias; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor @ToString @XStreamAlias("Response") public class DocumentRetrievalResponse { @XStreamAlias("Header") private ResponseHeader header; @XStreamAlias("Body") private Body body; @Data public static class Body { @XStreamAlias("ResultList") private ResultList resultList; @XStreamAlias("ResponseCount") private ResponseCount responseCount; @XStreamAlias("ResultCode") private String resultCode; @XStreamAlias("ResultContent") private String resultContent; //这个在xml里面是个对象 @Data public static class ResultList { //这个在xml中是个出现多次所以我定义为数组对象 @XStreamImplicit(itemFieldName="Item") private List<Item> item; @Data public static class Item { @XStreamAlias("BatId") private String batId; @XStreamAlias("RET") private String RET; } } @Data public static class ResponseCount { @XStreamAlias("FailCount") private String failCount; @XStreamAlias("SuccCount") private String succCount; } } }
实现类:
@Override public DocumentRetrievalResponse getReportList(String xml) { try { String respond = WebServiceUtil.callWebService("", xml); System.out.println(respond); DocumentRetrievalResponse documentRetrievalResponse = XmlUtil.toBean(respond, DocumentRetrievalResponse.class); return documentRetrievalResponse; } catch (Exception e) { System.out.println("something goes wrong during call webService"); } return null; }
主要的调webservice的方法如下:
import com.limu.boe.service.his.EsbConfig; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import javax.xml.rpc.ParameterMode; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; import javax.xml.namespace.QName; @org.springframework.stereotype.Service public class WebServiceUtil { @Autowired private EsbConfig esbConfig; private static EsbConfig staticEsbConfig; @PostConstruct public void init() { staticEsbConfig = esbConfig; } public static String callWebService(String serviceCode, String xmlReq) throws Exception { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(staticEsbConfig.getEndpoint()); call.setOperationName(new QName(staticEsbConfig.getNamespace(), staticEsbConfig.getMethodName())); call.addParameter(staticEsbConfig.getServiceCodeParamName(), XMLType.XSD_STRING, ParameterMode.IN); call.addParameter(staticEsbConfig.getXmlReqParamName(), XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); System.out.println(serviceCode); String xmlResp = (String) call.invoke(new Object[] {serviceCode, xmlReq}); System.out.println(xmlReq); System.out.println(xmlResp); return xmlResp; } }
这里分别为传入的两个参数,一个是请求号,一个是xml
解析xml工具类型:
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class XmlUtil { public static String toXml(Object model) { XStream xStream = new XStream(new DomDriver()); xStream.autodetectAnnotations(true); return xStream.toXML(model); } public static <T> T toBean(String xml, Class<T> clazz) { XStream xStream = new XStream(new DomDriver()); XStream.setupDefaultSecurity(xStream); xStream.allowTypesByRegExp(new String[] {".*"}); xStream.processAnnotations(clazz); xStream.ignoreUnknownElements(); //忽略未知的元素 return (T) xStream.fromXML(xml); } }
最后只需要调用service传入参数就可以了。
之前我传入的xml没有用实体去解析,而是直接根据soapui的xml去拼接的xml参数,我这里写了一个方法去调用:
public DocumentRetrievalResponse https(HrpPutStockMain m,int type) throws IllegalAccessException { String xml=getXML(m,type); DocumentRetrievalResponse responseXml=requestService.getReportList(xml); return responseXml; }
到此就结束了,主要碰到依赖没导入全面的时候编译报错,只要依赖没有错的话,调试出来还是很快的。
-
C#开发 WebService 创建 XML
2018-03-05 15:31:58XmlDocument xmldoc = new XmlDocument(); xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null)); XmlElement firstElement = xmldoc.CreateElement("", "data", ""); xmldoc.... -
最全面的 PHP webservice 接口,服务器端,客户端接口
2018-04-28 17:48:45WebService是一种跨编程语言和跨操作系统平台的远程调用技术。仅仅有通过Web Service,...不论两个程序的平台和变成语言是什么。 XML、SOAP和WSDL是Web Service平台的三大技术: WebService採用HTTP协议数据传输。 -
webservice接口开发详解(附完整流程demo)
2021-07-22 10:09:52由于公司对接第三方系统业务较多,所以就采用webservice进行对接,本文项目框架使用SSH搭建,其他框架也可以参考下具体使用流程,本文demo都是测试通过而且发布成功,有需要的可以直接copy根据自己的业务需求进行... -
webservice接口的开发和调用
2021-02-12 10:45:54一、WebService的开发手段使用Java开发WebService时可以使用以下两种开发手段1、 使用JDK开发(1.6及以上版本)2、使用CXF框架开发(工作中)二、使用JDK开发WebService2.1、开发WebService服务器端1、定义一个interface... -
Webservice接口开发
2020-10-12 11:41:36第一次进行WebService的开发,都是看网上的文章自己摸索着做的,在这个过程不可避免的遇到很多问题。第一次写文章记录一下大致的过程,同时也希望可以给他人一些参考。 一、 下载cxf 下载地址 选择二进制文件下载 ... -
cxf框架的webservice,传递json,xml
2014-03-13 15:23:47cxf框架的webservice,可以完美运行,生成了xml字符串并进行传递以及生成了json对象,然后传递给客户端 -
SpringBoot——实现WebService接口服务端以及客户端开发
2022-02-22 20:29:00文章目录一、服务端代码开发1、pom依赖2、接口类3、接口实现类4、webservice配置文件2、客户端开发(1)pom依赖(2)封装客户端方法clientUtil(3)调用接口类(4)运行结果 我们经常需要在两个系统之间进行一些数据... -
webService接口开发案例
2019-11-25 16:49:10一、开发webservice接口的方式 1、使用jdk开发 2、使用第三方工具,如cxf、shiro等 二、使用jdk开发webservice接口 1、服务端编写一个接口,类加上注解:@WebService 方法名加上注解:@WebMethod @WebService ... -
如何用IOS调用WebService(SOAP接口)
2021-01-20 09:13:50在一次项目开发过程中,用到IOS调用WebService接口,所以抽个空把这方面的内容给大家整理出来,分享给大家。 方法一:使用WSDL2ObjC工具,将接口转成OC类。 1.在浏览器中输入webService接口地址(Safari不可用,我用... -
java如何开发webservice接口
2020-11-25 18:00:17本次项目需求要改造一个现有的webservice接口,增加参数;这里先简略记录一下开发步骤。 至于webservice是什么,就暂时不谈了。 1.首先,从需求文档中找到目标接口url,以及方法名method,顺便看一下入参出参。 ... -
webapi webservice接口开发案例入门 .net接口开发
2021-05-14 15:35:15课程概要:本课程介绍当下使用.net开发语言完成接口开发的三个方法:简单接口开发方法、webservice接口开发方法、webapi接口开发方法。本课程面像无接口开经验的学员讲解,在做每一个案例的时候,会从最基础的步骤... -
WebService 调用封装实体的接口 SOAP
2019-07-11 14:37:59C#开发核心代码,用拼接XML方式,调用封装了实体类的SOAP接口 -
MVC框架中基于cxf开发webservice接口总结
2021-01-23 18:03:46第一次开发webservice接口,参考网上大神指导后自己开发完成后的一些总结,有需要的可以看看。 1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统... -
Java解析XML的一些个人总结及感悟。(webService、xml、xsd)
2022-03-21 17:25:361. 个人总结 使用SpringBoot搭建的Soap webService与webClient项目可以参看我写的另外两篇文章: (1)webService (2)webClient 但是对于上面两篇文章的...对于上面遇到的问题,突然想到如果采用传统的接口方式去 -
java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml
2021-05-21 17:15:03一、使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /** * 调用webservice接口的方法,并返回String类型的xml * @param readid 传入接口的参数 * @param url webservice的路径 ... -
webService例子,接口
2018-09-15 12:40:56webService为的解决不同语言开发的应用程序之间的数据交互而推出的Web 服务是描述一些操作(利用标准化的 XML 消息传递机制可以通过网络访问这些操作)的接口。Web服务描述是用标准的、规范的 XML 概念描述的,称为 ... -
springboot集成webService开发详解
2022-02-22 20:48:32服务端接口方为webservice则客户端也必须使用webservice,双方保持一致 因为webservice使用xml传输数据,因此性能上不能满足高并发 写法,使用上不够优化,使用也很少 springboot集成webService 环境准备 ... -
T100 Web Service 接口开发v1.5版.rar
2019-07-04 16:05:48T100接口开发-T100 Web Service 接口开发v1.5版最新版 WebService接口資料 -
Java三种方式实现发送xml参数的WebService接口调用
2018-08-04 17:48:39项目开发中与第三方系统数据对接遇到的问题,仅用作记录。 1.使用cxf调用(联调时没有收到响应信息) JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); logger.info(JSON.to... -
sap系统webservice接口开发
2021-11-23 17:02:33sap webservice接口开发,http basic认证