gpt4 book ai didi

java - 我们如何使用 Maven 发布 REST Web 服务的客户端 jar?连同 War 文件

转载 作者:行者123 更新时间:2023-12-01 12:50:11 25 4
gpt4 key购买 nike

我已经创建了 REST Web 服务并生成了 war 文件。我可以使用 REST 客户端部署和测试 API。我需要为那些将复杂对象作为参数的方法提供 REST API 的客户端 jar。我的本地类路径中有这些复杂的对象(作为源创建者,我已添加为依赖类)。但我面临的问题是如何使用 Maven 生成这些依赖的客户端 jar 并将其提供给我的 REST API 客户端。

所以任何人都可以告诉我如何为这些复杂对象生成客户端 jar 并使用 Maven 将该客户端 jar 提供给 REST API 客户端我的 Maven (pom.xml) 如下:=========================================POM.xml======== =========================

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>opentext</groupId>
<artifactId>opentext</artifactId>
<version>${project.version}.${svn.version}</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey-jaxrs_2.10</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.fusesource.restygwt</groupId>
<artifactId>restygwt</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>BPMService</finalName>
</build>
</project>

我的 REST 服务位于以下包中:REST 服务包com.rest.entity.services

我的 Complex 对象位于 com.rest.entity.bean 包中。我在 REST 服务方法中用作参数的那些复杂对象。

最佳答案

根据我们在您问题的评论部分中的对话:

下面是一个简单的 Maven 项目,它在目标目录中创建一个 Shiporder.class。

最终的结构:

.
|-- pom.xml
|-- src
| |-- main
| | |-- java
| | `-- resources
| | `-- shiporder.xsd
| `-- test
| `-- java
`-- target
|-- classes
| |-- META-INF
| | `-- sun-jaxb.episode
| |-- generated
| | |-- ObjectFactory.class
| | |-- Shiporder$Item.class
| | |-- Shiporder$Shipto.class
| | `-- Shiporder.class
| `-- shiporder.xsd
|-- generated-sources
| `-- xjc
| |-- META-INF
| | `-- sun-jaxb.episode
| `-- generated
| |-- ObjectFactory.java
| `-- Shiporder.java
|-- maven-archiver
| `-- pom.properties
|-- someservice-shared-0.0.1-SNAPSHOT.jar
`-- surefire

我刚刚从这里复制的xsd http://www.w3schools.com/schema/schema_example.asp :

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

最后是 Maven pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.zarathustra</groupId>
<artifactId>someservice-shared</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
</properties>

<build>
<plugins>
<plugin>
<!-- The right documentation: http://confluence.highsource.org/display/MJIIP/User+Guide
Interested in more? See also: https://stackoverflow.com/questions/2432859/difference-of-maven-jaxb-plugins -->
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-XtoString</arg>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
<arg>-Xcopyable</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.5</version>
</plugin>
</plugins>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<!-- To create Request & Responses -->
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-runtime</artifactId>
<version>0.6.5</version>
</dependency>
</dependencies>
</project>

生成的 jar 可以用作服务项目以及任何客户端项目中的依赖项。

所以你的步骤是:

  1. 从现有代码创建 xsd:Is it possible to generate a XSD from a JAXB-annotated class?

  2. 像上面一样创建一个maven项目a) 检查配置,也许还有一些您喜欢的附加选项。b) 请注意pom中的2个链接,有几个jaxb code-gen实现。c) 检查依赖项更新,只是从旧项目的代码复制而来;)

  3. 通过 Maven 依赖项将生成的 jar 添加到您的服务项目。

好处? xsd 也可用于其他编程语言。它也可以作为任何文档中的引用。

作为替代方案,如果您喜欢 Spring :https://github.com/spring-by-example/spring-by-example/tree/master/enterprise/spring-rest-services/

关于java - 我们如何使用 Maven 发布 REST Web 服务的客户端 jar?连同 War 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24282453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com