Java 如何使用Maven发布RESTWeb服务的客户机jar?还有战争档案
我已经创建了RESTWeb服务并生成了war文件。 我能够使用REST客户端部署和测试API。 我需要为我的RESTAPI提供客户端jar,用于那些将复杂对象作为参数的方法。 我知道这些复杂对象在我的本地类路径中(作为源创建者,我添加了依赖类)。 但是我所面临的问题是,如何使用Maven生成这些依赖的客户机jar并将其提供给我的RESTAPI客户机 所以任何人都可以告诉我如何为这些复杂对象生成客户机jar,并使用Maven将该客户机jar提供给RESTAPI客户机 我的Maven(pom.xml)如下所示: =============================================================POM.xml=================================Java 如何使用Maven发布RESTWeb服务的客户机jar?还有战争档案,java,rest,maven,jar,build,Java,Rest,Maven,Jar,Build,我已经创建了RESTWeb服务并生成了war文件。 我能够使用REST客户端部署和测试API。 我需要为我的RESTAPI提供客户端jar,用于那些将复杂对象作为参数的方法。 我知道这些复杂对象在我的本地类路径中(作为源创建者,我添加了依赖类)。 但是我所面临的问题是,如何使用Maven生成这些依赖的客户机jar并将其提供给我的RESTAPI客户机 所以任何人都可以告诉我如何为这些复杂对象生成客户机jar,并使用Maven将该客户机jar提供给RESTAPI客户机 我的Maven(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>
4.0.0
opentext
opentext
${project.version}.${svn.version}
战争
com.wordnik
swagger-jersey-jaxrs_2.10
1.3.0
org.fusesource.restygwt
restygwt
1.3.1
泽西岛
球衣束
1.17.1
org.codehaus.jackson
杰克逊·贾克斯
1.9.13
org.codehaus.jackson
杰克逊xc
1.6.1
commons httpclient
commons httpclient
3.1
src
src
**/*.爪哇
maven编译器插件
3.1
1.7
1.7
maven战争插件
2.3
网络内容
假的
BPM服务
我正在以下套餐中享受休息服务:
REST服务包com.REST.entity.services
我的复杂对象位于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:
最后是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>
4.0.0
com.github.zarathustra
创建一个maven项目,如上所述
a) 检查配置,可能还有一些您喜欢的附加选项。
b) 请注意pom中的2个链接,有几个jaxb代码gen实现。
c) 检查依赖项更新,仅从旧项目的代码复制;)
通过maven依赖项将结果jar添加到您的服务项目中
福利?xsd,也可用于其他编程语言。
也可以作为任何文档的参考
另一种选择是,如果您喜欢spring:通过REST实际发送的是什么?二进制数据,JSON?如果是JSON,则可以提供包含实体的附加库。Wich不是一个“客户端jar”,它将是一个包含客户端和服务器端公共类的jar。我希望客户端应该以XML的形式发送,但我的方法将支持这两种方式,因为我已将我的服务创建为:---------------------------------------------------------------@POST@Consumes({“application/json”,“application/XML”})@products({“application/json”,“application/javascript”,“application/xml”}@JSONP(callbackParam=“callback”)公共响应claimTask(com.business.entity.bean.claimTask)-------------------------------------------------------我希望客户端应该像下面这样发送XML,但我不知道如何传递JSON,所以我正在使用JAXB。一般来说,我会使用一些框架,比如在大多数情况下,您不必关心JSON或XML。无论如何,由于您不发送二进制数据,所以可以使用实体发布额外的jar。但是您使用的是jaxb,所以您可能有一个xsd?出版这本书就足够了。因为您可以从中生成客户机代码。My Each bean类是JXBI注释类com.business.entity.bean.AssignTask assignTaskObj=new com.business.entity.bean.AssignTask();assignTaskObj.setTaskId(“002481F0-8E9F”);assignTaskObj.setAssignedTo(“cn=lgautam”);StringWriter编写器=新的StringWriter();JAXBContext JAXBContext=JAXBContext.newInstance(com.business.jaxws.task.assigntask.assigntask.class);Marshaller jaxbMarshaller=jaxbContext.createMarshaller();jaxbMarshaller.marshal(assignTaskObj,编写者);DefaultHttpClient httpClient=新的DefaultHttpClient();HttpPost postRequest=新的HttpPost(“URL”);那么,为了拥有实体,您需要发布什么?一个xsd。您甚至可以从现有代码生成xsd,请参见此处:
<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>