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日

相关文章

  • 解决spring项目找不到Aspect依赖注解的问题

    当我们在Spring项目中使用AspectJ时,可能会遇到找不到Aspect依赖注解的问题。这是由于AspectJ依赖的jar文件没有正确添加到项目的classpath中所致。以下是解决该问题的完整攻略: 第一步:添加AspectJ的依赖 在项目的pom.xml中添加以下依赖: <dependency> <groupId>org.as…

    Java 2023年5月31日
    00
  • 基于Spring Web Jackson对RequestBody反序列化失败的解决

    针对“基于Spring Web Jackson对RequestBody反序列化失败的解决”的完整攻略,我将从以下三个方面进行详细讲解: 问题背景和原因 解决方案和实现步骤 示例说明 1. 问题背景和原因 假设在使用Spring Web进行服务开发时,我们需要接收客户端发起的请求消息体(RequestBody),并将其转换为Java对象进行后续处理,此时一般会…

    Java 2023年5月19日
    00
  • Java线程池由浅入深掌握到精通

    Java线程池从入门到精通 Java线程池是一种多线程处理机制,用于管理和调度多个线程。通过线程池,可以复用线程、控制线程数量,从而提高程序并发处理能力和资源利用率。 1. 初识Java线程池 1.1 线程池的优点 使用线程池具有以下优点: 降低线程创建和销毁带来的性能损耗; 通过重用线程来优化程序性能; 可以对线程数量进行限制和控制,避免系统资源被消耗殆尽…

    Java 2023年5月19日
    00
  • J2SE中的序列化的认识

    J2SE(Java 2 Standard Edition)中的序列化是指将Java对象转换为可以存储或传输的字节序列的过程,反之亦然。序列化是Java编程语言中非常重要的一种机制,使用Java序列化可以让开发者在不同的机器上传递对象,并在需要的时候读取或写入对象数据。以下是对J2SE中的序列化的认识的完整攻略: 什么是J2SE中的序列化? J2SE中的序列化…

    Java 2023年6月15日
    00
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    首先,我们需要在项目中添加MyBatis Generator Maven插件,该插件可自动化生成MyBatis的mappper、model和example类。下面是整合MyBatis Generator Maven插件的步骤: 添加插件依赖 在pom.xml文件的插件列表中,添加MyBatis Generator Maven插件的依赖: <plugin…

    Java 2023年5月19日
    00
  • javaweb在线支付功能实现代码

    下面是“javaweb在线支付功能实现代码”的完整攻略。 确定支付方式和接口 首先需要确定网站支持哪些支付方式,例如支付宝、微信支付等,然后根据支付方式找到相应的支付接口,例如支付宝的即时到账接口或者微信支付的统一下单接口。 创建订单 在用户确认需要支付时,需要创建对应的订单并保存到数据库中。订单包含以下信息: 订单号:唯一标识该订单 商品名称:用户购买的商…

    Java 2023年6月15日
    00
  • 响应式编程初探

    响应式 响应式系统(Reactive System) 具有以下特质:即时响应性(Responsive)、回弹性(Resilient)、弹性(Elastic)以及消息驱动(Message Driven)响应式系统更加灵活,松耦合,可伸缩 即时响应性 只要有可能, 系统就会及时地做出响应。 即时响应是可用性和实用性的基石, 而更加重要的是,即时响应意味着可以快速…

    Java 2023年4月17日
    00
  • idea使用jclasslib插件查看字节码

    下面是使用jclasslib插件查看字节码的完整攻略。 简介 jclasslib是一款Java字节码编辑器,可以用于查看、分析Java类文件的字节码。除了常规的字节码指令和常量池信息外,它还能够查看方法、字段、注解、接口等相关信息。 同时,jclasslib还提供Intellij IDEA插件,让开发者能够直接在IDEA中使用jclasslib功能,进行更为…

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