精华内容
下载资源
问答
  • 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

    更多相关内容
  • 您可能感兴趣的文章: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实战开发视频教程 教程内容:第一期:01_webservice快速实例02_wsimport的使用03_wsdl和soap讲解(介入了tcpmon工具)04_SOA的分析(纯属扯淡)05_dtd讲解06_schema的命名空间07_schema的元素和属性的定义...
  • webservice接口开发,常常需要进行对象与xml的相互转换,使用commons-betwixt-0.8.jar 是比较好的选择,现在提供示例代码
  • C#开发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!一个基本的接口开发过程到此结束。

    • 感谢大家的耐心阅读,如有建议请私信或评论留言。
    • 如有收获,劳烦支持,关注、点赞、评论、收藏均可,与大家共同进步。

    参考地址:

    WebService几个常见的异常

    CXF报安全性错误 Cannot create a secure XMLInputFactory

    WebService-JDK的wsimport命令和cxf的wsdl2java命令的区别和使用

    展开全文
  • WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的...
  • Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI...
  • axis传xmlwebService接口并解析传回的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
    application.yml的配置配置werService地址和参数:
    这是我的webservice打开后的页面:
    这是我的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:58
     XmlDocument xmldoc = new XmlDocument();  xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null));  XmlElement firstElement = xmldoc.CreateElement("", "data", "");  xmldoc....
  • WebService是一种跨编程语言和跨操作系统平台的远程调用技术。仅仅有通过Web Service,...不论两个程序的平台和变成语言是什么。 XML、SOAP和WSDL是Web Service平台的三大技术: WebService採用HTTP协议数据传输。
  • 由于公司对接第三方系统业务较多,所以就采用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,可以完美运行,生成了xml字符串并进行传递以及生成了json对象,然后传递给客户端
  • 文章目录一、服务端代码开发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接口,所以抽个空把这方面的内容给大家整理出来,分享给大家。 方法一:使用WSDL2ObjC工具,将接口转成OC类。 1.在浏览器中输入webService接口地址(Safari不可用,我用...
  • java如何开发webservice接口

    千次阅读 2020-11-25 18:00:17
    本次项目需求要改造一个现有的webservice接口,增加参数;这里先简略记录一下开发步骤。 至于webservice是什么,就暂时不谈了。 1.首先,从需求文档中找到目标接口url,以及方法名method,顺便看一下入参出参。 ...
  • 课程概要:本课程介绍当下使用.net开发语言完成接口开发的三个方法:简单接口开发方法、webservice接口开发方法、webapi接口开发方法。本课程面像无接口开经验的学员讲解,在做每一个案例的时候,会从最基础的步骤...
  • C#开发核心代码,用拼接XML方式,调用封装了实体类的SOAP接口
  • 第一次开发webservice接口,参考网上大神指导后自己开发完成后的一些总结,有需要的可以看看。 1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统...
  • 1. 个人总结 使用SpringBoot搭建的Soap webService与webClient项目可以参看我写的另外两篇文章: (1)webService (2)webClient 但是对于上面两篇文章的...对于上面遇到的问题,突然想到如果采用传统的接口方式去
  • 一、使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /** * 调用webservice接口的方法,并返回String类型的xml * @param readid 传入接口的参数 * @param url webservice的路径 ...
  • webService例子,接口

    2018-09-15 12:40:56
    webService为的解决不同语言开发的应用程序之间的数据交互而推出的Web 服务是描述一些操作(利用标准化的 XML 消息传递机制可以通过网络访问这些操作)的接口。Web服务描述是用标准的、规范的 XML 概念描述的,称为 ...
  • springboot集成webService开发详解

    千次阅读 2022-02-22 20:48:32
    服务端接口方为webservice则客户端也必须使用webservice,双方保持一致 因为webservice使用xml传输数据,因此性能上不能满足高并发 写法,使用上不够优化,使用也很少 springboot集成webService 环境准备 ...
  • T100接口开发-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接口开发,http basic认证

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,456
精华内容 12,182
关键字:

webservice开发xml接口