Intellij IDEA开发WebService步骤实例

Intellij IDEA开发WebService步骤实例

以“基本运算服务的开发与部署。具体内容:实现加、减、乘、除、平方、开平方等常用数学运算 webservice”为例介绍
1)新建项目
    a.进入File > New Project…菜单打开新建项目窗口,依次选择Java、WebServices,Version项选择Apache Axis,Libraries项选择 Download。然后点击Next按钮进入下一页
(注意:1.要确保电脑联网,勾选DownLoad是为了下载必要的jar报,这个是需要联网下载的,否则后面的实验很难进行 2.Version一项改为 Apache Axis)
在这里插入图片描述
     b.在下一页中输入项目名称,然后点击Finish按钮开始下载依赖包。依赖包下载完成后进入新建的项目,选择项目文件存放位置,自定义项目名。
在这里插入图片描述
2)项目初始结构(有一个自动生成的Java类–HelloWorld)
在这里插入图片描述
3)生成WSDL文件
    a.可以修生成的HelloWorld文件内容,实现常用算数运算,或者自己另外创建一个类编写源代码实现常用算数运算(我是直接修改的HelloWorld)

package example;
public class HelloWorld {
    public double add(double a, double b) {
        return a + b;
    }

    public double minus(double a, double b) {
        return a - b;
    }

    public double multiply(double a, double b) {
        return a * b;
    }

    public double divide(double a, double b) {
        return a / b;
    }

    public double power(double a) {
        return a*a;
    }

    public double sqrt(double a) {
        if (a < 0) {
            System.out.println("开方数要大于0");
            return 0;
        } else {
            return Math.sqrt(a);
        }
    }
}

    b.在HelloWorld.java文件上点击右键,选WebServices -> Generate Wsdl From Java Code 。在弹出的窗口里点OK。
在这里插入图片描述
在这里插入图片描述
    c.这时会发现在项目结构目录里多了一个HelloWorld.wsdl文件。
在这里插入图片描述
4)配置Tomcat服务器及项目结构
    a.选择Run > Edit Configurations…菜单,打开Run/Debug Configurations窗口。
在这里插入图片描述
    b.在Run/Debug Configurations窗口里添加+按钮,在出现的菜单里选择Tomcat Server > Local。如果看不到Tocmat Server菜单项,则点击最下面的29 items more (irelevant)…菜单项查找。
在这里插入图片描述
    c.然后在添加的Tomcat Server配置页面中添加配置的Name、Application server和HTTP Port。如果Application server为空,将本地的 Tomcat 安装地址添加进来。如果本地没有,从网上下载 Tomcat 7:https://tomcat.apache.org/download-70.cgi
这时配置页面底部可能会显示有Warning:No Artifacts marked for deployment(警告:没有标记要部署的产物)。
点击警告信息右侧的Fix…按钮切换到Deployment标签页。
在这里插入图片描述
    d.在Deployment标签页点击Deploy at the server startup区的+按钮,选择Artifacts。
在这里插入图片描述
    e.添加 Artifact 后的界面如下,已经没有警告了。点击OK完成运行参数的配置。
在这里插入图片描述
    f.到这个时候,然后可以运行起服务了,但是访问服务页面时还是会报错。因为还要给部署的 Artifact 添加 Apache Axis 包的依赖。
    选择File> Project Structure…菜单。
在这里插入图片描述
    g.在出现的窗口中选择Project Settings > Artifacts,会到在新的警告信息。点击警告信息右侧的Fix…按钮。
在这里插入图片描述
    h.在弹出菜单里选择Add ‘JAX-WS-Apache Axis’ to the artifact。
在这里插入图片描述
    i.修复完成后警告消失。
在这里插入图片描述
5)启动Tomcat查看wsdl
    a.点击工具栏上的运行或调试按钮运行服务。
在这里插入图片描述
    b.在浏览器里输入:
http://localhost:8080/services
    访问结果如下:
在这里插入图片描述
    d.点击HelloWorld(wsdl)能正常查看wsdl的内容则发布成功。服务器端完成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6)编写客户端代码调用服务

package test;

import org.apache.axis.utils.StringUtils;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class CalculateClient {

    public static void main(String[] args) {
        // 指定调用WebService的URL(这里是我们发布后点击HelloWorld)
        String url = "http://localhost:8080/services/HelloWorld?wsdl";
        //调用的方法
        String method = "add";
        //调用方法的参数列表
        Object[] parms = new Object[]{2.0,3.0};
        CalculateClient calculateClient = new CalculateClient();
        //调用方法
        String svrAddResult = calculateClient.CallMethod(url, method, parms);

        System.out.println(svrAddResult);

        String svrMinusResult = calculateClient.CallMethod(url, "minus", new Object[]{5.0,2.0});
        String svrMultiplyResult = calculateClient.CallMethod(url, "multiply", new Object[]{2.0,3.0});
        String svrDivideResult = calculateClient.CallMethod(url, "divide", new Object[]{8.0,5.0});
        String svrPowerResult = calculateClient.CallMethod(url, "power", new Object[]{5.0});
        String svrSqrtResult = calculateClient.CallMethod(url, "sqrt", new Object[]{9.0});

        System.out.println("5.0 - 2.0 is " + svrMinusResult);
        System.out.println("2.0 * 3.0 is " + svrMultiplyResult);
        System.out.println("8.0 - 5.0 is " + svrDivideResult);
        System.out.println("5.0^2 is " + svrPowerResult);
        System.out.println("9.0^(1/2) is " + svrSqrtResult);
    }

    //实现WebService上发布的服务调用
    public String CallMethod(String url, String method, Object[] args) {
        String result = null;

        if(StringUtils.isEmpty(url)) {
            return "url地址为空";
        }
        if(StringUtils.isEmpty(method)) {
            return "method地址为空";
        }

        Call rpcCall = null;

        try {
            //实例websevice调用实例
            Service webService = new Service();
            rpcCall = (Call) webService.createCall();
            rpcCall.setTargetEndpointAddress(new java.net.URL(url));
            rpcCall.setOperationName(method);

            //执行webservice方法

            double rslt = (double) rpcCall.invoke(args);
            result = String.valueOf(rslt);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

    }

}

7)运行客户端程序查看结果
在这里插入图片描述
    可能会遇到的问题:
    1.在启动Tomcat后,运行客户端代码遇到错误:“org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.”
    解决办法:找到web->WEB-INF下的server-config.wsdd文件定位到下面的内容做修改:
    去掉红框部分
在这里插入图片描述
    2.地洞Tomcat后,在浏览器输入http://http://localhost:8080/services结果为404
    解决办法:在WEB-INF下新建web.xml文件并复制以下内容到web.xml(若有这个文件可直接修改为以下内容)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>Apache-Axis</display-name>
    <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>
    <servlet>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-name>AdminServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet>
        <display-name>SOAPMonitorService</display-name>
        <servlet-name>SOAPMonitorService</servlet-name>
        <servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
        <init-param>
            <param-name>SOAPMonitorPort</param-name>
            <param-value>5101</param-value>
        </init-param>
        <load-on-startup>100</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>SOAPMonitorService</servlet-name>
        <url-pattern>/SOAPMonitor</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
    </servlet-mapping>
    <mime-mapping>
        <extension>wsdl</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>

</web-app>

    

猜你喜欢

转载自blog.csdn.net/qq_43147940/article/details/84712605