JavaEE应用程序如何将RESTEasy服务的URL放在一起,可以通过浏览器访问它?

时间:2017-06-09 18:47:21

标签: java rest maven wildfly-10

我开始使用JavaEE的东西,特别是RESTEasy,我尝试整理由maven打包的小型服务。服务完成后,将创建ear包并将其部署到WildFly 10服务器。没有错误,但我无法联系/调用服务方法。

我在这里经历了很多问题和答案,根据他们我的应用程序应该可以工作,我应该可以调用它。有一点我不知道,到目前为止还没有找到任何文档来创建应用程序的URL。

这里的主要问题:这个网址创建的规则是什么?我在哪里可以找到它?

到目前为止,我已经看到以下参数会影响网址:

  • war文件名(哪一个,原始文件(以SNAPSHOT字符串结尾,或者在其余项目的pom.xml中定义的finalName参数或者在ear package的pom.xml中的bundleFileName?是吗?)战争档案名称是否重要,如果war文件打包成耳朵?)
  • 在ear项目的pom.xml中定义的上下文根值(它被复制到application.xml文件)
  • @ApplicationPath注释RestEasy的Application类
  • web.xml(如果有)
  • 服务类和方法的@Path值

让我们看看我的申请。

我的应用程序包含3个maven模块。主模块(pom模块)有两个模块,a,耳包模块,b,rest api模块创建war文件。 Pom.xml文件位于下方。

Maven模块

  • pom模块没有做任何事情。
  • ear模块将ear文件放在一起,重要的是它将war文件重命名为MasterData.Rest.Api.war。
  • 其余的api web模块会生成一个war文件。

最终, ear文件如下所示:

  • Masterdata.Dataservice.ear
  • Masterdata.Dataservice.ear / MasterData.Rest.Api.war

没有web.xml文件,也没有jboss.xml文件。

根据一些文章和示例,货币/货币方法应该可以使用以下网址(它们都不起作用):

只是简单地部署war文件也不行。默认情况下,该文件具有以下丑陋的名称:digitallibrary.dataservice.masterdata.rest.api-1.0-SNAPSHOT.war。成功部署后,端点应在此处可用:

它没有用。

Wildfly说以下内容可能意味着可以通过以下网址访问该应用程序(我只是在猜测......),但它们都没有工作......

Wildfly的部署日志。

19:58:17,673 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-5) WFLYSRV0027: Starting deployment of "MasterData.Dataservice.ear" (runtime-name: "MasterData.Dataservice.ear")
19:58:17,682 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) WFLYSRV0207: Starting subdeployment (runtime-name: "MasterData.Rest.Api.war")
19:58:17,712 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 111) WFLYUT0021: Registered web context: /
19:58:17,727 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) WFLYSRV0010: Deployed "MasterData.Dataservice.ear" (runtime-name : "MasterData.Dataservice.ear")

服务器正在运行且没有错误。

package app;

import endpoints.CurrencyEndpoint;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

/**
 * Created by SayusiAndo on 6/9/2017.
 */
public class MasterDataRestEndpointApplication extends Application {

    private Set<Object> singletons = new HashSet<Object>();

    public MasterDataRestEndpointApplication() {
        singletons.add(new CurrencyEndpoint());
    }

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>();
        return set;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
}

package endpoints;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;

/**
 * Created by SayusiAndo on 6/9/2017.
 */
@Path("/currency")
public class CurrencyEndpoint {

    @GET
    @Path("/currencies")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getCurrencies() {
        ArrayList list = new ArrayList<String>();
        list.add("currency1");
        list.add("currency2");

        return Response
                .status(Response.Status.OK)
                .entity(list)
                .build();
    }
}

POM模块pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.sayusiando</groupId>
    <artifactId>digitallibrary.dataservice.masterdata</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>digitallibrary.dataservice.masterdata.rest.api</module>
        <module>digitallibrary.dataservice.masterdata.package.ear</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>1.2.0.Alpha4</version>
            </plugin>
        </plugins>
    </build>

</project>

EAR模块pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>digitallibrary.dataservice.masterdata</artifactId>
        <groupId>com.sayusiando</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>ear</packaging>

    <artifactId>digitallibrary.dataservice.masterdata.package.ear</artifactId>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.10.1</version>
                <configuration>
                    <finalName>MasterData.Dataservice</finalName>
                    <modules>
                        <webModule>
                            <groupId>com.sayusiando</groupId>
                            <artifactId>digitallibrary.dataservice.masterdata.rest.api</artifactId>
                            <bundleFileName>MasterData.Rest.Api.war</bundleFileName>
                            <contextRoot>/</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.sayusiando</groupId>
            <artifactId>digitallibrary.dataservice.masterdata.rest.api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>


</project>

REST模块pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>digitallibrary.dataservice.masterdata</artifactId>
        <groupId>com.sayusiando</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <artifactId>digitallibrary.dataservice.masterdata.rest.api</artifactId>

    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.1-m07</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>3.1.2.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.1.2.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxb-provider</artifactId>
            <version>3.1.2.Final</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

生成的application.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>digitallibrary.dataservice.masterdata.package.ear</display-name>
  <module>
    <web>
      <web-uri>MasterData.Rest.Api.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
</application>

1 个答案:

答案 0 :(得分:1)

我犯了一些错误,但我学到了一些东西。

第一个错误:

出于某种原因,我在RestEasy应用程序路径上删除了@ApplicationPath()注释。没有这个和web.xml Wildfly不知道该怎么做这些类。所以他们没有注册。

放回@ApplicationPath()注释,删除web.xml使情况更好。

第二个错误:

出于某种原因(:)),我检查了http://localhost:8000而不是http://localhost:8080。后者是WildFly的网站。第一个没什么。

回答我的问题

  • 在这种情况下,EAR和WAR文件的名称无关紧要
  • 根据以下内容创建网址:http://{host}:{port}/{applicationPathvalue}/{pathValueOfClass}/{pathValueOfMethod}

就我而言:

  • {host}:localhost
  • {port}:8080
  • {applicationPathValue}:api(请查看下面的代码示例)
  • {pathValueOfClass}:currency(查看我的问题中的代码)
  • {pathValueOfMethod}:currency(查看我问题中的代码)

    @ApplicationPath(&#34; / API&#34) 公共类MasterDataRestEndpointApplication扩展了Application {

    private Set<Object> singletons = new HashSet<Object>();
    
    public MasterDataRestEndpointApplication() {
        singletons.add(new CurrencyEndpoint());
    }
    
    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>();
        return set;
    }
    
    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
    

    }