java实现简单的webservice方式

Java实现简单的Web Service方式可以通过使用两种不同的编程方式来完成:JAX-WS和Apache CXF。下面我们分别介绍这两种方式。

JAX-WS方式实现Web Service

JAX-WS是Java API for XML Web Services的缩写,是Java SE 6及以上提供的一种WebService编程API。
下面是一个简单的JAX-WS Web Service的例子,该Web Service接收两个数字并返回它们的求和结果。

  1. 创建一个Java类来实现Web Service
package com.example;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class MyWebService {
    @WebMethod
    public int add(int a, int b) {
        return a + b;
    }
}
  1. 使用javac编译类文件
javac com/example/MyWebService.java
  1. 使用wsimport生成WSDL文件和客户端代码
wsimport -keep http://localhost:8080/MyWebService?wsdl
  1. 部署Web Service

可以使用Java Web容器如Apache Tomcat或Jetty部署该Web Service,或者使用以下命令启动内置Web服务器:

java javax.xml.ws.Endpoint  publish("http://localhost:8080/MyWebService", new MyWebService());

至此,我们的Web Service已经成功部署,并且可以通过访问http://localhost:8080/MyWebService?wsdl来获取WSDL文件,然后使用生成的客户端代码调用该Web Service的方法。

Apache CXF方式实现Web Service

Apache CXF是一个开源的WebService框架,可以使用其提供的工具轻松创建并发布Web Service。下面是一个简单的Apache CXF Web Service的例子,该Web Service接收一个字符串,并返回该字符串的大写形式。

  1. 创建一个Java类来实现Web Service
package com.example;

import javax.jws.WebService;

@WebService
public class MyWebService {
    public String toUpperCase(String s) {
        return s.toUpperCase();
    }
}
  1. 使用Apache CXF Maven插件来生成代码
mvn archetype:generate -DgroupId=com.example -DartifactId=my-webservice -DarchetypeArtifactId=maven-archetype-quickstart
cd my-webservice

然后在pom.xml中添加CXF的依赖,并配置插件。

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-bundle-jaxrs</artifactId>
    <version>3.3.1</version>
</dependency>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/wsdl/mywebservices.wsdl</wsdl>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 编写WSDL文件
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyWebService" targetNamespace="http://example.com/">
    <wsdl:types>
        <xsd:schema targetNamespace="http://example.com/">
            <xsd:element name="toUpperCase" type="xsd:string"/>
            <xsd:element name="toUpperCaseResponse" type="xsd:string"/>
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="toUpperCaseRequest">
        <wsdl:part name="parameters" element="tns:toUpperCase" />
    </wsdl:message>
    <wsdl:message name="toUpperCaseResponse">
        <wsdl:part name="parameters" element="tns:toUpperCaseResponse" />
    </wsdl:message>
    <wsdl:portType name="MyWebServicePortType">
        <wsdl:operation name="toUpperCase">
            <wsdl:input message="tns:toUpperCaseRequest" />
            <wsdl:output message="tns:toUpperCaseResponse" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="MyWebServiceBinding" type="tns:MyWebServicePortType">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"/>
        <wsdl:operation name="toUpperCase">
            <wsdlsoap:operation soapAction=""/>
            <wsdl:input><wsdlsoap:body use="literal"/></wsdl:input>
            <wsdl:output><wsdlsoap:body use="literal"/></wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="MyWebService">
        <wsdl:port binding="tns:MyWebServiceBinding" name="MyWebServicePort">
            <wsdlsoap:address location="http://localhost:8080/MyWebService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
  1. 生成Python客户端代码
java -cp target/classes/:$HOME/.m2/repository/org/apache/cxf/cxf-rt-bindings-soap/3.3.1/cxf-rt-bindings-soap-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-bundle-jaxrs/3.3.1/cxf-bundle-jaxrs-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-core/3.3.1/cxf-core-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-bindings-xml/3.3.1/cxf-rt-bindings-xml-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-frontend-jaxrs/3.3.1/cxf-rt-frontend-jaxrs-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-frontend-simple/3.3.1/cxf-rt-frontend-simple-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-transports-http/3.3.1/cxf-rt-transports-http-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-wsdl/3.3.1/cxf-rt-wsdl-3.3.1.jar org.apache.cxf.tools.wsdlto.WSDLToJava -client -d target/src/main/java -p com.example http://localhost:8080/MyWebService?wsdl
  1. 部署Web Service

可以使用Java Web容器如Apache Tomcat或Jetty部署该Web Service,或者使用以下命令启动内置Web服务器:

java -cp target/classes/:$HOME/.m2/repository/org/apache/cxf/cxf-rt-bindings-soap/3.3.1/cxf-rt-bindings-soap-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-bundle-jaxrs/3.3.1/cxf-bundle-jaxrs-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-core/3.3.1/cxf-core-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-bindings-xml/3.3.1/cxf-rt-bindings-xml-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-frontend-jaxrs/3.3.1/cxf-rt-frontend-jaxrs-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-frontend-simple/3.3.1/cxf-rt-frontend-simple-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-transports-http/3.3.1/cxf-rt-transports-http-3.3.1.jar:$HOME/.m2/repository/org/apache/cxf/cxf-rt-wsdl/3.3.1/cxf-rt-wsdl-3.3.1.jar org.apache.cxf.endpoint.ServerImpl -serviceClass com.example.MyWebService -serviceName "{http://example.com/}MyWebService" -portName "{http://example.com/}MyWebServicePort" -address "/MyWebService"

至此,我们的Web Service已经成功部署,并且可以通过访问http://localhost:8080/MyWebService?wsdl来获取WSDL文件,然后使用生成的客户端代码调用该Web Service的方法。

以上就是使用JAX-WS和Apache CXF两种方式实现Java Web Service的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简单的webservice方式 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Linux小技巧分享之如何重新启动tomcat

    接下来我将详细讲解关于“Linux小技巧分享之如何重新启动tomcat”的完整攻略。 什么是Tomcat? Tomcat是一个广泛使用的开源Web服务器,具备Servlet和JSP规范,由Apache基金会维护。 为什么需要重新启动Tomcat? 当我们修改了Tomcat中的配置文件或者部署了新的代码后,我们需要重新启动Tomcat才能使这些变更生效。 如何…

    Java 2023年6月2日
    00
  • Java利用Jackson序列化实现数据脱敏详解

    下面我就向您介绍一下Java利用Jackson序列化实现数据脱敏的攻略。 背景 随着大数据时代的到来,在数据采集和存储方面,数据隐私和安全问题变得愈发重要。对于某些敏感数据,为了保护用户隐私,往往需要进行脱敏处理。而在Java开发中,常用的序列化工具是Jackson,本攻略将介绍如何使用Jackson实现常见的数据脱敏。 操作步骤 1.添加依赖 首先需要在项…

    Java 2023年5月26日
    00
  • Java多线程并发编程 Volatile关键字

    Java多线程并发编程中,Volatile关键字是一种轻量级的同步机制。在多线程并发场景下,使用Volatile关键字可以保证变量的可见性和禁止指令重排。本篇攻略将详细讲解Volatile关键字的用法和应用场景。 Volatile关键字的用法 在Java中,使用Volatile关键字可以将变量的值在多个线程之间可见。当一个线程修改了被Volatile修饰的变…

    Java 2023年5月19日
    00
  • java对数组进行排序的方法

    以下是Java对数组进行排序的方法的完整攻略。 1. Java中的排序方法 Java提供了一系列快速且易用的排序方法,可用于对数组进行排序: Arrays.sort(int[] arr): 对整形数组进行快速排序; Arrays.sort(char[] arr): 对字符数组进行快速排序; Arrays.sort(double[] arr): 对双精度浮点型…

    Java 2023年5月20日
    00
  • Java 类与对象重难点详解

    Java 类与对象重难点详解 Java 类与对象是 Java 的重要特性之一,理解其概念和运用,对于学习 Java 编程语言和开发具有非常重要的意义。本篇攻略将为大家讲解 Java 类与对象的相关概念和用法,以及一些常见的难点和解决方案。 类与对象的基本概念 在 Java 中,类是一种自定义的数据类型,是描述具有相同属性和行为的对象的蓝图。对象则是类的一个实…

    Java 2023年5月26日
    00
  • 简单谈谈java的异常处理(Try Catch Finally)

    让我来详细讲解一下Java的异常处理(Try Catch Finally)攻略。 什么是Java异常处理? Java异常处理是指在程序运行时出现某些错误或异常时,程序能够捕获并处理这些错误或异常,让程序具有更好的健壮性和稳定性。 异常的分类 Java中的异常分为未检查异常(unchecked exception)和已检查异常(checked exceptio…

    Java 2023年5月20日
    00
  • 解决JDBC的class.forName()问题

    解决 JDBC 的 Class.forName() 问题 在使用 JDBC 连接数据库时,我们通常使用的是以下代码: Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, username, passwor…

    Java 2023年6月16日
    00
  • Java图形化编程之JFrame疫苗接种系统详解

    当编写GUI程序时,JFrame框架是至关重要的组件之一。JFrame框架为GUI应用程序提供了主要的用户界面,并包含其他组件和部件,如按钮、文本框、菜单、对话框和面板等。本文将提供如何使用Java编写GUI程序的细节,其重点是JFrame疫苗接种系统的详细解释。 创建JFrame窗体 要创建一个JFrame窗体,需要从JFrame类继承一个子类,并使用ja…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部