标签: jersey-2.0

Jersey 2.0"入门"指南,找不到mainClass

嗨,我正在尝试按照Jersey 2.0 的入门指南.

我按原样执行了步骤1.1和1.2.没问题.

对于步骤1.3,我有一个问题,因为maven找不到javax-annotation 1.2但是我按照另一个Stackoverflow用户的建议解决了它,并在我的pom中添加了一个存储库.

所以mvn clean test通过没有问题,但是当我试图跑,mvn clean exec:java我回来

[WARNING] java.lang.ClassNotFoundException: com.example.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285)
at java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)

pom.xml是由以下命令创建的:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.0
Run Code Online (Sandbox Code Playgroud)

我唯一补充的内容如下:

<repositories>
  <repository>
    <id>java.net.repo</id>
    <url>https://maven.java.net/content/groups/promoted/</url>
    <layout>default</layout>
  </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

如果它是感兴趣的,这是输出 mvn -version

 Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
 Maven home: /usr/share/maven
 Java version: 1.7.0_21, vendor: Oracle Corporation …
Run Code Online (Sandbox Code Playgroud)

java jersey maven jersey-2.0

10
推荐指数
1
解决办法
5287
查看次数

ResourceContext.matchResource(URI)的Jersey 2替换是什么?

如何在Jersey 2.0下找出任意URI映射到的资源?在Jersey 1.x下,我使用ResourceContext.matchResource(URI).

我正在尝试做什么:我正在尝试处理通过URI引用另一个资源的传入请求.例如,这是一个将用户链接到部门的操作.

POST /departments/5
{
  "user": "http://example.com/users/10"
}
Run Code Online (Sandbox Code Playgroud)

POST/departments/5解决:

class DepartmentResource
{
  @POST
  void linkUser() { ... }
}
Run Code Online (Sandbox Code Playgroud)

为了兑现这个请求,我需要将URI解析回UserResource并从那里解析为其数据库ID.添加@Context UriInfolinkUser()不会帮助,因为这UriInfo相当于部门,而不是用户的URI.

更新:我在https://github.com/eclipse-ee4j/jersey/issues/2444上提交了一份错误报告

UPDATE2:发布了一个后续问题:Jersey2:从资源导航到实例

java jersey jersey-2.0

10
推荐指数
1
解决办法
2863
查看次数

泽西2在Jboss 7上

有没有人成功使用JBoss 7.x部署Jersey 2.x?我尝试使用JBoss 7.1.1部署Jersey 2.5,但遇到了如下错误:

"java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;"
Run Code Online (Sandbox Code Playgroud)

我相信这个问题是因为JBoss捆绑了RestEasy,这是一个JAX-RS 1.0实现,而Jersey是一个JAX-RS 2.0实现.所以我采取了以下步骤来禁用RestEasy:

1)在我的web.xml中添加了以下内容:

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

2)在这里讨论之后,我修改了JBoss的standalone.xml,module.xml和domain.xml以删除对JAXRS1.1/RestEasy的所有引用.

3)这导致了另一个错误:"java.lang.NoClassDefFoundError:org/objectweb/asm/ClassVisitor",我通过将以下内容添加到我的pom.xml来解决:

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

所以最后我的应用程序部署没有错误,但现在我似乎无法访问我的任何泽西资源.但Jetty 8工作正常.我也能够运行Jersey 1.x,而不必采取步骤#2和#3,但如果可能的话,我更愿意使用Jersey 2.x.

另外我还尝试创建一个jboss-deployment-structure.xml文件,但后来我仍然遇到之前的错误,如"java.lang.NoSuchMethodError:javax.ws.rs.core.Application.getProperties()Ljava/util /地图;"

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-deployment-structure>
  <deployment>
    <exclusions>
            <module name="org.jboss.resteasy.resteasy-atom-provider"/>  
            <module name="org.jboss.resteasy.resteasy-cdi"/>  
            <module name="org.jboss.resteasy.resteasy-jackson-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jaxb-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jaxrs"/>  
            <module name="org.jboss.resteasy.resteasy-jettison-provider"/>  
            <module name="org.jboss.resteasy.resteasy-jsapi"/>  
            <module name="org.jboss.resteasy.resteasy-multipart-provider"/>  
            <module name="org.jboss.resteasy.resteasy-yaml-provider"/>  
            <module name="org.apache.log4j"/>  
            <module name="org.apache.commons.pool"/>  
            <module name="javax.ws.rs.api"/>
    </exclusions>
  </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

Jboss和Jersey 2.x有没有运气好吗?任何帮助,将不胜感激.

java jboss jersey jboss7.x jersey-2.0

10
推荐指数
1
解决办法
1万
查看次数

使用Spring在Jersey 2中定制Jackson ObjectMapper

我在将泽西岛从1.x迁移到2.x时遇到了一些问题.我的应用程序使用Jersey提供REST Web服务,通​​过Jackson和Spring 4以JSON方式提供数据来处理依赖注入.

在Jersey 1.xi用于编写JsonDeserializer作为Spring管理的组件,所以我可以在反序列化期间访问我的服务以从persistance层加载我的域对象,但是在2.x中我遇到了在注入服务时出现问题的问题反序列化器工作.我所采用的方法受到了这篇博文的启发:http://www.runningasroot.com/blog/2012/05/02/autowiring-jackson-deserializers-in-spring/

这是我的pom.xml的依赖部分:

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- Jersey -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <!-- Commons Codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${commons-codec.version}</version>
    </dependency>

    <!-- cut -->

<dependencies>
Run Code Online (Sandbox Code Playgroud)

Jersey版本是2.7,Spring 4.0.2.RELEASE.

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <module-name>myApp/module-name> …
Run Code Online (Sandbox Code Playgroud)

spring jersey jackson jersey-2.0

10
推荐指数
1
解决办法
5248
查看次数

如何迭代MultivaluedMap并提取密钥及其相应的第一个值?

这是我的第一次尝试的代码.但是这样做的正确方法是什么.

    private Map<String,String> prepareParameters(MultivaluedMap<String, String> queryParameters) {

    Map<String,String> parameters = new HashMap<String,String>();
    for (Map.Entry<String,List<String>> e : queryParameters.entrySet()) {
        parameters.put(e.getKey(), e.getValue().get(0));
    } 
Run Code Online (Sandbox Code Playgroud)

java jersey jersey-2.0

10
推荐指数
1
解决办法
3万
查看次数

Jersey 2.3设置ContainerRequestFilter的优先级

public class MyApplication extends ResourceConfig {

    public MyApplication() {
       /* // Register resources and providers using package-scanning.
        packages("com.keylesson.service");

        // Register my custom provider - not needed if it's in my.package.
        register(TestFilter.class);
        register(TestFilter2.class);*/
    }
}
Run Code Online (Sandbox Code Playgroud)

取消注释后的上面的代码能够执行两个过滤器类,但顺序是TestFilter2,然后是TestFilter.这个Resourceconfig方法我不太喜欢,我想为Jersey2.3使用旧式web.xml.过滤器的球衣1.x init-params在jersey2.3中不起作用.任何人都可以帮助我使用jersey2.3的示例web.xml来保证过滤器的执行吗?还有序列testfilter然后testfilter2?

java web.xml jax-rs jersey jersey-2.0

10
推荐指数
1
解决办法
8911
查看次数

REST JAX-RS javax.ws.rs.ProcessingException:

每当我的REST客户端代码使用下面的代码调用REST服务时,我就会遇到异常: 代码:

public void putWatcher(Watcher watcher)
    {
        System.out.println("In REST Client putWatcher.***********");

        target = target.path(RESOURCE_WATCHERS).path(watcher.getWatcheruri());
        System.out.println(target.getUri());
        Invocation.Builder builder = target.request();
        builder.put(Entity.json(watcher));
//      Response response = target.request().put(Entity.json(watcher));
        System.out.println("Returned from REST Call");
    }
Run Code Online (Sandbox Code Playgroud)

例外:

: javax.ws.rs.ProcessingException: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:667)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:664)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:424)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.java:318)

Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family;
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:63)
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:54)
    at org.glassfish.jersey.message.internal.Statuses.from(Statuses.java:93)
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:323)
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246)
    ... 29 more
Run Code Online (Sandbox Code Playgroud)

我的REST服务部署在Tomcat 8服务器上,客户端代码部署在JBoss 7.2上. 客户端应用程序是SIP-Servlets应用程序,它也捆绑了REST客户端. …

java rest jboss jersey-client jersey-2.0

10
推荐指数
2
解决办法
2万
查看次数

为什么当状态为500时,球衣没有错误日志?

这是我的web.xml:

<servlet>
  <servlet-name>Jersey REST Service</servlet-name>
  <servlet-class>
    org.glassfish.jersey.servlet.ServletContainer
  </servlet-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>rest</param-value>
  </init-param>
  <init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

这是我的资源类:

@Path("/main")
public class MainResource {

    @XmlRootElement
    public class Planet {
        public int id;
        public String name;
        public double radius;
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Planet getPlanet() {
        final Planet planet = new Planet();

        planet.id = 1;
        planet.name = "Earth";
        planet.radius = 1.0;

        return planet;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行tomcat服务器时,日志是这样的:

09-Jan-2015 13:19:10.501 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 1 * Server has received a request on thread http-apr-8080-exec-8 …
Run Code Online (Sandbox Code Playgroud)

jersey-2.0

10
推荐指数
1
解决办法
3267
查看次数

在Java中使用Thread.currentThread().join()

以下代码取自Jersey项目中的示例.看到这里.

public class App {

    private static final URI BASE_URI = URI.create("http://localhost:8080/base/");
    public static final String ROOT_PATH = "helloworld";

    public static void main(String[] args) {
        try {
            System.out.println("\"Hello World\" Jersey Example App");

            final ResourceConfig resourceConfig = new ResourceConfig(HelloWorldResource.class);
            final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, false);
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                @Override
                public void run() {
                    server.shutdownNow();
                }
            }));
            server.start();

            System.out.println(String.format("Application started.\nTry out %s%s\nStop the application using CTRL+C",
                    BASE_URI, ROOT_PATH));

            //////////////////////////////
            Thread.currentThread().join();
            //////////////////////////////

        } catch (IOException | InterruptedException ex) { …
Run Code Online (Sandbox Code Playgroud)

java multithreading jersey jersey-2.0

10
推荐指数
2
解决办法
4477
查看次数

Jersey API + JPA/Hibernate Criteria Lazy Loading无法正常工作

这是一个简化的POJO我有:

@Entity
@Table( name = "Patient" )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
(
                name="Discriminator",
                discriminatorType=DiscriminatorType.STRING
                )
@DiscriminatorValue(value="P")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Patient implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "ID", unique = true, nullable = false)
    protected Integer ID;

    @ManyToOne(targetEntity = TelephoneType.class, fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="IDPhoneType")
    protected TelephoneType phoneType;


    @JsonProperty(required=false, value="phoneType")
    public TelephoneType getPhoneType() {
        return phoneType;
    }
    public void setPhoneType(TelephoneType phoneType) {
        this.phoneType = phoneType;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这是我的班级TelephoneType:

@Entity
@Table( name = "TelephoneType" ) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa lazy-loading jersey-2.0

10
推荐指数
1
解决办法
2009
查看次数