【问题标题】:jax-rs and server namejax-rs 和服务器名称
【发布时间】:2014-05-16 15:37:46
【问题描述】:

我仍在使用 jax-rs 服务器,最近遇到了一些新问题。我不明白我在哪里定义我的网络服务器的名称。我搜索了工作区中的所有内容,但找不到任何内容。 让我们进一步展开这个问题:

我总是通过http://XXXXXX.XXXXX.XXX-XXXXXXX.de/android/ 访问我服务器的@GET 方法

这是我的服务器类的结构:

@Path("/users")
public class UserResource {

Connection dbconn = null;

public UserResource() {
    userIds = new ArrayList<Integer>();
    userIds.add(1);
    userIds.add(2);
    userIds.add(3);
}

@GET
@Path("/login/{id}")
@Consumes("application/xml")
public StreamingOutput getTests(@PathParam("id") int id, InputStream is) {
    return new StreamingOutput() {
        public void write(OutputStream outputStream) throws IOException,
                WebApplicationException {
            getTests(outputStream);
        }
    };
}

如您所见,我的类的路径是“/users”,@GET 方法的路径是“/login/1”(例如 id = 1)。现在我尝试通过

调用该方法
http://XXXXXX.XXXXX.XXX-XXXXXXX.de/android/users/login/1

但这不起作用。我收到一个错误(来源不明)。我的 error.log 说它在

处找不到资源
http://XXXXXX.XXXXX.XXX-XXXXXXX.de/users/users/login/1

我的第一个问题:双“/users”从何而来?我不知道。当我在我的请求 url 中留下“/users”时,error.log 中将只有 1 个“/users”,但仍然找不到资源。

还有一件事我还没有发现:如何更改我的服务名称? Atm,它是“android”,但我怎么能改变它呢?我搜索了整个工作区,在我的 pom.xml 中找到了“android”,但是当我将其更改为“testandroid”时,上传所有内容,构建并运行服务器,名称仍然是 android。不知道为什么会这样。

谢谢你们的帮助!

编辑: 这是我的“主要”课程:

package com.restfully.services;

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

public class ServerApplication extends Application {
   private Set<Object> singletons = new HashSet<Object>();
   private Set<Class<?>> empty = new HashSet<Class<?>>();

   public ServerApplication() {
      singletons.add(new UserResource());
   }

   @Override
   public Set<Class<?>> getClasses() {
      return empty;
   }

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

我正在使用 Eclipse 和 Maven。该应用程序在码头服务器上运行。如果您可以使用任何进一步的信息,请告诉我。

【问题讨论】:

    标签: java maven jax-rs


    【解决方案1】:

    您可以在以下地方查看

    Pom.xml 文件用于上下文根以下条目;

    <configuration>
        <context>yourWarName</context>
    </configuration>
    

    使用 Netbeans 检查项目属性下的运行类别上下文路径。

    Context Path: /yourWarName  
    

    也请查看您的web.xml

    在使用 jax-rs 时,您通常会定义一个配置类;

    @ApplicationPath("resources")
    public class RestConfig extends Application{
    
    }
    

    从那里你定义你的其他路径;

        @Stateless
        @Path("/login")
        public class LoginResource
    
        public Response login(Credentials credentials) {
        Credentials result = this.loginService.login(credentials);
                return Response.status(Response.Status.OK).entity(result).build();
         }
    

    以下路径为:http://domain.com/MyApp/resources/login 其中 MyApp 是上下文根。

    可能是在 config 或 root 中指定了一个名为 users 的路径,您正在获取双重用户。

    【讨论】:

    • 感谢您的帮助!但我仍然不明白我的 error.log 中的 2 个“/users”来自哪里
    • 您能否提供更多信息、您的环境和配置。仅让 UserResource 类可见,很难看出可能导致错误的原因。
    • 还要在打包文件 (myApp-1.0-SNAPSHOT.war) 中构建后检查 META-INF 文件夹下 context.xml 文件中的路径名。
    • 您是否在 web.xml 或 context.xml 文件中进行任何配置?
    • 我看到您正在码头上运行该项目。我在 Tomee 上运行我所有的项目。尚未在 Jetty 上进行任何托管,但请查看如何为 Rest 设置码头服务器,Integrating Jetty with JAX-RS-Jersey
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多