基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现

这篇具有很好参考价值的文章主要介绍了基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

JAX-WS(Java API for XML-Based Web Services),是创建web服务的Java编程接口,特别是SOAP服务。是Java XML编程接口之一,是Java SE 和Java EE 平台的一部分。
JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务API。JAX-RPC(The Java API for XML Based RPC)是基于XML的RPC(远程过程调用)的Java API。
JAX-WS 2.0 使用JAXB(The Java Architecture for XML Binding)进行XML数据绑定,所谓绑定就是指XML请求和XML响应如何映射成java对象。

参考资源

JAX-WS 2.0参考资源

https://jcp.org/en/jsr/detail?id=224
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

https://jakarta.ee/specifications/xml-web-services/2.3/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

JAX-WS 3.0参考资源

https://jakarta.ee/specifications/xml-web-services/3.0/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

JAX-WS 4.0参考资源

https://jakarta.ee/specifications/xml-web-services/4.0/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

Jakarta Web Services Metadata

Jakarta Web Services Metadata项目是Jakarta XML Web Services 项目的一部分,它用Java为web 服务定义了一个编程模型。

代码库:https://github.com/jakartaee/jws-api
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

Jakarta Web Services Metadata 3.0 Specification Document (HTML):
https://jakarta.ee/specifications/web-services-metadata/3.0/ws-metadata-spec-3.0

Jakarta Web Services Metadata 3.0 Javadoc:
https://jakarta.ee/specifications/web-services-metadata/3.0/apidocs/jakarta.jws/module-summary.html

参考实现

旧项目(已经归档、只读)

https://javaee.github.io/metro-jax-ws/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

https://github.com/javaee/metro-jax-ws
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

新项目(Jakarta XML Web Services Eclipse 实现)

主页:
https://eclipse-ee4j.github.io/metro-jax-ws/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

代码库:
https://github.com/eclipse-ee4j/metro-jax-ws
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
XML web服务的Eclipse 实现是一个web服务框架,它为最终用户和中间件开发者开发web服务解决方案提供了工具和基础设施(infrastructure)。
使用XML web服务的Eclipse 实现,客户端和web有一个大的优势:Java编程语言的平台无关性。

Jakarta XML Web Services Eclipse 实现需要的软件

JRE版本

Java SE 11或以后版本

Ant 版本

Ant 1.10.6或以后版本

servlet容器

在GlassFish v7.x 、Apache Tomcat 10.1.x下测试过

安装Jakarta XML Web Services Eclipse 实现

下载Jakarta XML Web Services Eclipse实现独立zip发布包

打开主页:https://eclipse-ee4j.github.io/metro-jax-ws/
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
点击右侧的Download就可以下载独立发布包,例如,下载jaxws-ri-4.0.0.zip。
解压后的目录:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

bin子目录下的内容:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

docs子目录下的内容:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

lib子目录下的内容:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

samples子目录下的内容:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

安装到Tomcat中

设置CATALINA_HOME环境变量,指向Tomcat的安装目录,例如:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
在cmd窗口,切换到Jakarta XML Web Services Eclipse实现解压后的目录,例如:D:\jaxws-ri-4.0.0\jaxws-ri
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

这个目录下有build.xml文件:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant install命令。这个命令其实执行了两个大的操作:

  • 拷贝Jakarta XML Web Services Eclipse实现lib子目录下的jar文件到Tomcat安装目录下面的/shared/lib子目录中
  • 更新Tomcat安装目录下面/conf/catalina.properties文件中的属性shared.loader,使之等于${catalina.home}/shared/lib/*.jar

build.xml文件片段:

<target name="install" depends="update-catalina-props" description="Install XML-WS RI 4.0.0 jars">
    <echo message="Installing XML-WS RI 4.0.0 for ${catalina.home} ..."/>

    <mkdir dir="${catalina.lib.home}"/>
    <copy toDir="${catalina.lib.home}" overwrite="true">
        <fileset dir="${basedir}/lib" includes="*.jar"/>
    </copy>

</target>

<target name="update-catalina-props">
    <echo message="Backing up ${catalina.home}/conf/catalina.properties..."/>
    <copy file="${catalina.home}/conf/catalina.properties" tofile="${catalina.home}/conf/catalina.properties.backup"/>
    <echo message="Adding XML-WS RI jars to shared.loader property in ${catalina.home}/conf/catalina.properties..."/>
    <replace file="${catalina.home}/conf/catalina.properties" token="shared.loader=" value="shared.loader=$${catalina.home}/shared/lib/*.jar,"/>
</target>

执行ant install命令的窗口输出信息:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

Jakarta XML Web Services Eclipse 实现依赖的jar包

https://eclipse-ee4j.github.io/metro-jax-ws/4.0.0/docs/release-documentation.html#jar-dependency
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

SOAP1.1+HTTP样例:运行fromjava样例(来自Jakarta XML Web Services Eclipse实现发布包)

说明

fromjava这个样例演示了从一个Java service endpoint的实现开始,如何构建、部署、调用一个简单的web服务。其中Java service endpoint的实现使用了Java注释。
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

fromjava的目录结构:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

服务实现类只有一个方法addNumbers,输入两个整数,返回一个整数,抛出AddNumbersException异常:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行web服务有两种方式:

  • 在servlet容器中运行
  • 作为一个j2se webservice endpoint运行(不需要servlet容器)

运行方式一:在tomcat容器中运行web服务

设置环境变量JAXWS_HOME指向JAX-WS的安装目录

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

在cmd窗口切换到fromjava的目录

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant clean

运行ant clean的作用是删掉${build.home}目录。其中${build.home}目录指向${basedir}/build,就是fromjava/build目录。(其实这个命令不运行也可以,因为下一步运行ant server命令的时候其中含有ant clean的步骤)
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant server -Dtomcat=true

运行ant server -Dtomcat=true的作用是构建、部署web服务的WAR包,因为要将web服务运行在tomcat中,所以加了-Dtomcat=true这个属性。这个命令做了四个工作:

<target name="server" depends="setup">

    <antcall target="clean"/>

    <antcall target="build-server-java"/>

    <antcall target="create-war"/>

    <antcall target="deploy"/>
</target>

运行输出:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

现在fromjava目录下的文件布局(注:照理${env.AS_HOME}这个目录不应该生成的,对我们没有什么用):

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA
│  build.xml
│  Readme.txt
│  
├─${env.AS_HOME}
│  └─domains
│      └─domain1
│          └─autodeploy
│                  jaxws-fromjava.war
│                  
├─build
│  ├─classes
│  │  └─fromjava
│  │      └─server
│  │          │  AddNumbersException.class
│  │          │  AddNumbersImpl.class
│  │          │  AddWebservice.class
│  │          │  EndpointStopper$1.class
│  │          │  EndpointStopper.class
│  │          │  
│  │          └─jaxws
│  │                  AddNumbers.class
│  │                  AddNumbers.java
│  │                  AddNumbersExceptionBean.class
│  │                  AddNumbersExceptionBean.java
│  │                  AddNumbersResponse.class
│  │                  AddNumbersResponse.java
│  │                  
│  └─war
│          jaxws-fromjava.war
│          
├─etc
│      deploy-targets.xml
│      sun-jaxws.xml
│      web.xml
│      
└─src
    └─fromjava
        ├─client
        │      AddNumbersClient.java
        │      
        └─server
                AddNumbersException.java
                AddNumbersImpl.java
                AddWebservice.java
                EndpointStopper.java

<tomcat安装目录>/webapps下查看,war包已经拷贝过来了:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行tomcat

因为生成客户端代码的时候要访问web服务动态生成的wsdl文件,所以要先启动tomcat。
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

<tomcat安装目录>/webapps下查看,war包已经被自动部署了:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

部署以后的文件布局:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\JAXWS-FROMJAVA
├─META-INF
│      MANIFEST.MF
│      war-tracker
│      
└─WEB-INF
    │  sun-jaxws.xml
    │  web.xml
    │  
    └─classes
        └─fromjava
            └─server
                │  AddNumbersException.class
                │  AddNumbersImpl.class
                │  AddWebservice.class
                │  EndpointStopper$1.class
                │  EndpointStopper.class
                │  
                └─jaxws
                        AddNumbers.class
                        AddNumbers.java
                        AddNumbersExceptionBean.class
                        AddNumbersExceptionBean.java
                        AddNumbersResponse.class
                        AddNumbersResponse.java

看看wsdl文件能否正常生成

访问http://localhost:8080/jaxws-fromjava/addnumbers?wsdl
可以看到,正常生成了wsdl文件。生成客户端代码的时候,就要访问这个wsdl的地址。
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

<?xml version='1.0' encoding='UTF-8'?><!-- Published by XML-WS Runtime (https://github.com/eclipse-ee4j/metro-jax-ws). Runtime's version is XML-WS Runtime 4.0.0 git-revision#129f787. --><!-- Generated by XML-WS Runtime (https://github.com/eclipse-ee4j/metro-jax-ws). Runtime's version is XML-WS Runtime 4.0.0 git-revision#129f787. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://server.fromjava/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.fromjava/" name="AddNumbersImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://server.fromjava/" schemaLocation="http://localhost:8080/jaxws-fromjava/addnumbers?xsd=1"/>
</xsd:schema>
</types>
<message name="addNumbers">
<part name="parameters" element="tns:addNumbers"/>
</message>
<message name="addNumbersResponse">
<part name="parameters" element="tns:addNumbersResponse"/>
</message>
<message name="AddNumbersException">
<part name="fault" element="tns:AddNumbersException"/>
</message>
<portType name="AddNumbersImpl">
<operation name="addNumbers">
<input wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbersRequest" message="tns:addNumbers"/>
<output wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbersResponse" message="tns:addNumbersResponse"/>
<fault message="tns:AddNumbersException" name="AddNumbersException" wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbers/Fault/AddNumbersException"/>
</operation>
</portType>
<binding name="AddNumbersImplPortBinding" type="tns:AddNumbersImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="addNumbers">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="AddNumbersException">
<soap:fault name="AddNumbersException" use="literal"/>
</fault>
</operation>
</binding>
<service name="AddNumbersImplService">
<port name="AddNumbersImplPort" binding="tns:AddNumbersImplPortBinding">
<soap:address location="http://localhost:8080/jaxws-fromjava/addnumbers"/>
</port>
</service>
</definitions>

运行ant clean

运行ant clean:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant client

运行ant client的目的是为了生成客户端代码并编译:

<target name="generate-client" depends="setup">
    <wsimport
            debug="true"
            verbose="${verbose}"
            keep="true"
            destdir="${build.classes.home}"
            package="fromjava.client"
            wsdl="http://localhost:8080/jaxws-fromjava/addnumbers?wsdl">
    </wsimport>
</target>

<target name="client" depends="generate-client">
    <javac
            fork="true"
            srcdir="${basedir}/src"
            destdir="${build.classes.home}"
            includes="**/client/**,**/common/**">
        <classpath refid="jaxws.classpath"/>
    </javac>
</target>

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行后,客户端代码布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│  └─fromjava
│      └─client
│              AddNumbers.class
│              AddNumbers.java
│              AddNumbersClient.class
│              AddNumbersException.class
│              AddNumbersException.java
│              AddNumbersException_Exception.class
│              AddNumbersException_Exception.java
│              AddNumbersImpl.class
│              AddNumbersImpl.java
│              AddNumbersImplService.class
│              AddNumbersImplService.java
│              AddNumbersResponse.class
│              AddNumbersResponse.java
│              ObjectFactory.class
│              ObjectFactory.java
│              package-info.class
│              package-info.java
│              
└─war

运行ant run

执行ant run表示运行客户端。

<target name="run">
    <java fork="true" classname="fromjava.client.AddNumbersClient">
        <classpath>
            <path refid="jaxws.classpath"/>
            <pathelement location="${build.classes.home}"/>
            <pathelement location="${basedir}/etc"/>
        </classpath>
    </java>
</target>

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

在运行ant run前,启动Wireshark抓包工具,在环回接口上抓包,目的是看看调用web服务的协议是否用了SOAP协议(用http过滤):
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

计算10+20的请求:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
计算10+20的响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

计算-10+20的请求:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

计算-10+20的响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行方式二:作为一个j2se webservice endpoint运行(不运行在servlet容器中)

运行ant clean server-j2se

运行ant clean server-j2se生成服务端代码,并且用Endpoint API来部署:

<target name="server-j2se" depends="setup">
    <antcall target="clean"/>

    <antcall target="build-server-java"/>

    <echo message="Starting endpoint... To stop: ant server-j2se-stop "/>

    <java fork="true" classname="fromjava.server.AddWebservice">
        <classpath>
            <path refid="jaxws.classpath"/>
            <pathelement location="${build.classes.home}"/>
        </classpath>
    </java>
</target>

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

生成的文件布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│  └─fromjava
│      └─server
│          │  AddNumbersException.class
│          │  AddNumbersImpl.class
│          │  AddWebservice.class
│          │  EndpointStopper$1.class
│          │  EndpointStopper.class
│          │  
│          └─jaxws
│                  AddNumbers.class
│                  AddNumbers.java
│                  AddNumbersExceptionBean.class
│                  AddNumbersExceptionBean.java
│                  AddNumbersResponse.class
│                  AddNumbersResponse.java
│                  
└─war

访问http://localhost:8080/jaxws-fromjava/addnumbers?wsdl
可以正常生成wsdl文件:

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant clean client run

另外打开一个cmd窗口,运行ant clean client run,目的是在根据endpoint发布的wsdl文件生成客户端代码、编译、并且运行。
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行后,客户端的代码布局:
D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│ └─fromjava
│ └─client
│ AddNumbers.class
│ AddNumbers.java
│ AddNumbersClient.class
│ AddNumbersException.class
│ AddNumbersException.java
│ AddNumbersException_Exception.class
│ AddNumbersException_Exception.java
│ AddNumbersImpl.class
│ AddNumbersImpl.java
│ AddNumbersImplService.class
│ AddNumbersImplService.java
│ AddNumbersResponse.class
│ AddNumbersResponse.java
│ ObjectFactory.class
│ ObjectFactory.java
│ package-info.class
│ package-info.java

└─war

运行ant server-j2se-stop,停止web服务

<target name="server-j2se-stop" depends="setup">
    <get src="http://localhost:9090/stop" dest="stop.status"/>
</target>

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

REST风格的web服务样例(使用XML/HTTP绑定 )

说明

本样例来自Jakarta XML Web Services Eclipse实现发布包中的restful样例:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
这个样例展示了基于REST风格的web服务,利用XML/HTTP绑定。在这种情况下,不需要发布wsdl文件。

服务端实现了一个web服务的Provider:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

客户端访问web服务,样例演示了两种访问方式:

  • 方式一:使用Jakarta XML Web Services Dispatch,利用HTTP GET请求方法,以及Jakarta XML Web Services MessageContext 的属性 PATH_INFO 和 QUERY_STRING。

  • 方式二:使用URLConnection。

  • 另外,也可以直接在浏览器中访问,就作为方式三吧。

restful样例的目录结构:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\RESTFUL
│  build.xml
│  Readme.txt
│  
├─etc
│      deploy-targets.xml
│      sun-jaxws.xml
│      web.xml
│      
└─src
    └─restful
        ├─client
        │      AddNumbersClient.java
        │      DispatchAddNumbersClient.java
        │      
        └─server
                AddNumbersImpl.java

web服务需要两个输入参数,然后求和,将计算结果返回。

运行服务端

设置环境变量JAXWS_HOME,指向JAX-WS的安装目录

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

在cmd窗口切换到restful的目录

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行ant clean server -Dtomcat=true

运行ant clean server -Dtomcat=true,其中tomcat=true这个系统属性表示将服务端的web服务部署到tomcat上。
运行输出信息:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
现在restful目录下的文件布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\RESTFUL
│  build.xml
│  Readme.txt
│  
├─build
│  ├─classes
│  │  └─restful
│  │      └─server
│  │              AddNumbersImpl.class
│  │              
│  └─war
│          jaxws-restful.war
│          
├─etc
│      deploy-targets.xml
│      sun-jaxws.xml
│      web.xml
│      
└─src
    └─restful
        ├─client
        │      AddNumbersClient.java
        │      DispatchAddNumbersClient.java
        │      
        └─server
                AddNumbersImpl.java

到<tomcat安装目录>/webapps下查看,war包已经拷贝过来了:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

运行tomcat

基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

到<tomcat安装目录>/webapps下查看,war包已经被自动部署了:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

部署以后的文件布局:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\JAXWS-RESTFUL
├─META-INF
│      MANIFEST.MF
│      war-tracker
│      
└─WEB-INF
    │  sun-jaxws.xml
    │  web.xml
    │  
    └─classes
        └─restful
            └─server
                    AddNumbersImpl.class

(客户端访问web服务方式三)直接在浏览器中访问web服务、抓包分析

直接在浏览器中访问,服务已经正常启动:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

用Wireshark在本地环回接口上开启抓http的包,在浏览器中重新访问。
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

响应报文是HTTP/XML形式的:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

(客户端访问web服务方式一)在cmd窗口基于Dispatch方式运行客户端

运行ant clean client run-dispatch:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

客户端运行以后的输出目录布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\RESTFUL\BUILD
├─classes
│  └─restful
│      └─client
│              AddNumbersClient.class
│              DispatchAddNumbersClient.class
│              
└─war

运行客户端的时候,同步用Wireshark在本地环回接口抓到的http的包:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

请求参数放在URL的查询部分::
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

请求参数放在URL的路径部分::
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

(客户端访问web服务方式二)在cmd窗口使用URLConnection方式访问web服务

运行ant clean client run-url:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

客户端运行以后的输出目录布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\RESTFUL\BUILD
├─classes
│  └─restful
│      └─client
│              AddNumbersClient.class
│              DispatchAddNumbersClient.class
│              
└─war

用WireShark在本地环回接口上同步抓到的包:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

请求参数放在URL的查询部分:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

请求参数放在URL的路径中:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
响应:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java

Jakarta XML Web Services Eclipse实现下载方式二:用maven下载

这种方式不需要安装Jakarta XML Web Services Eclipse实现单独的发布包。

创建一个maven工程,在maven工程的pom.xml文件中增加如下依赖:

  <dependencies>
    <dependency>
      <groupId>jakarta.xml.ws</groupId>
      <artifactId>jakarta.xml.ws-api</artifactId>
      <version>4.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.sun.xml.ws</groupId>
      <artifactId>jaxws-rt</artifactId>
      <version>4.0.0</version>        
    </dependency>
  </dependencies>

因为将web服务部署servlet容器(例如tomcat)的时候,依赖的包是放在一个目录下面的。所以,要部署的时候,可以先使用maven的dependency插件,将项目依赖从maven仓库中提取出来,拷贝到一个指定的位置(如果使用ant构建的话,方便ant的build文件编写)。

例如,在cmd窗口,切换到maven工程的根目录下面,运行mvn dependency:copy-dependencies -Dmdep.stripVersion=true -DoutputDirectory=lib,指定将依赖包拷贝到项目根目录下面的lib子目录下,拷贝时去掉了依赖包文件名中的版本号:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java
<项目根目录>/lib子目录下查看,内容拷贝过来了:
基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现,java文章来源地址https://www.toymoban.com/news/detail-714796.html

到了这里,关于基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java调用参数为xml格式的接口,分析转换返回结果

    最近第一次接触到xml格式的接口,以下是自己编写的经验,铁汁们可以参考自己的项目自行修改。 完整代码已附在文章末尾,如有缺陷,欢迎评论区或私信交流。 首先向接口提供方申请了接口文档,包含了接口地址和参数信息,先使用postman工具调用接口,分析参数和返回值

    2024年02月10日
    浏览(31)
  • Java基于Andriod平台的手机Web地图服务设计(源码+mysql+文档)

    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考 选题背景: 随着移动互联网的快速发展,智能手机已经成为人们生活中不可或缺的一部分。而地图服务作为智能手机的重要功能之一,为用户提供了方便快捷的定位、导航和搜索服务。然而,传统的桌

    2024年01月25日
    浏览(34)
  • Java调用WebService接口,SOAP协议HTTP请求返回XML对象

    Java调用Web service接口SOAP协议HTTP请求,解析返回的XML字符串: 1. 使用Java的HTTP库发送SOAP请求,并接收返回的响应。 可以使用Java的HttpURLConnection、Apache HttpClient等库。 2. 将返回的响应转换为字符串。 3. 解析XML字符串 ,可以使用Java的DOM解析器或者其他第三方库,如JDOM、DOM4J等。

    2024年01月19日
    浏览(38)
  • java: 无法访问jakarta.servlet.ServletContext 找不到jakarta.servlet.ServletContext的类文件

    今天在学习springmvc的时候发现了一个关系冲突的问题,首先我不是大神,我只是一个初学者。 问题是由javax和jakerta引出来的。我的tomcat版本是9,jdk是17,spring是6.0.11,然后tomcat9使用的应该还是javax,但是在使用spring自己封装好的WebApplicaitonUtils的  getWebApplicationContext方法去优

    2024年02月04日
    浏览(37)
  • java: 无法访问jakarta.servlet.ServletException 找不到jakarta.servlet.ServletException的类文件

    tomcat插件用不了?tomcat配置用不了?jdk太高了? 就在pom加个这个试试吧 因为黑马程序员ssm用的是jdk8,tomcat插件 但是我用jdk18,所以就用配置本地的那个,其他用最新的依赖

    2024年02月12日
    浏览(39)
  • java web中部署log4j.xml

    标题:Java Web中部署log4j.xml 目录: 1. 介绍 2. 配置log4j.xml文件 3. 配置web.xml文件 4. 配置Spring框架 5. 配置Spring Bean 6. 总结 ## 1. 介绍 在Java Web开发中,日志记录是非常重要的一部分。log4j是一个常用的Java日志记录框架,它提供了灵活的配置和强大的日志功能。本篇博客将介绍如何

    2024年02月09日
    浏览(34)
  • 解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在

    解决方法如下: 添加maven-compiler-plugin插件,并且配置compilerArguments 如: 注意: 1:这里的rt.jar需要配置正确的路径 2:如果使用的类,接口等在其他的jar里面(如tools.jar),则bootclasspath值需要配置成其他的jar 配置好之后,再编译打包,就没有问题了

    2024年02月21日
    浏览(38)
  • java: 无法访问jakarta.servlet.ServletException

    使用SpringMvc时出现报错报错 java: 无法访问jakarta.servlet.ServletException   找不到jakarta.servlet.ServletException的类文件 在 Java EE 8 中,一些标准的 Java EE 包已经从  javax  包迁移到了  jakarta  包,其中包括  javax.servlet  包 。这个问题通常是由于 使用的依赖版本过低所导致的 。因此,

    2024年04月23日
    浏览(47)
  • java.lang.NoClassDefFoundError: jakarta/json/JsonException

    java.lang.NoClassDefFoundError: jakarta/json/JsonException 整合Elasticsearch是提示错误java.lang.NoClassDefFoundError: jakarta/json/JsonException 找不到包 添加依赖 在导入依赖后,依然发现报错,查看源码可以发现,包名对不上。 此时给jakarta.json-api设置版本 再次执行就没有问题了。

    2024年02月11日
    浏览(26)
  • nginx部署时http接口正常,ws接口404

    可以这么配置 首先: 表示的是: 如果 $http_upgrade 不为 ‘’ (空),则 $connection_upgrade 为 upgrade 。 如果 $http_upgrade 为 ‘’ (空),则 $connection_upgrade 为 close。 其次: 表示的是 nginx负载均衡: 两台服务器 (ip1:port1)和(ip2:port2) 。 keepalive 1000 表示的是每个nginx进程中上游服务器保持

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包