小编use*_*334的帖子

JAX-RS资源错误:无法找到类java.lang.String的JAX-B元素以及更多异常

当我从Java EE 7 SDK示例'async-chat'对剩余资源'queue'进行OPTIONS调用时,当jersey的日志级别设置为FINE时,我会遇到很多例外(org.glassfish.jersey.level =精细).我的代码中发生了相同的异常,如下所示.两个应用程序都运行正

这些异常是否无关紧要(仅在日志记录级别为FINE时抛出)?

如果没有,他们为什么会被抛出?

我测试了几个GlassFish 4安装以及GlassFish 4.0.1.他们都表现出相同的行为.

例外:

Many of those entries:
FINE:   Couldn't find JAX-B element for class java.lang.String
FINE:   Couldn't find JAX-B element for class javax.ws.rs.core.Response

Also many of those (there are between 10 and 20 such error blocks):
FINE:   java.lang.NoSuchMethodException: javax.ws.rs.container.ContainerRequestContext.<init>()
    at java.lang.Class.getConstructor0(Class.java:2800)
    at java.lang.Class.getDeclaredConstructor(Class.java:2043)
    at org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator$6.resolve(WadlGeneratorJAXBGrammarGenerator.java:418)
    at org.glassfish.jersey.server.wadl.WadlGenerator$ExternalGrammarDefinition.resolve(WadlGenerator.java:179)
    at org.glassfish.jersey.server.wadl.internal.ApplicationDescription.resolve(ApplicationDescription.java:82)
    at org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator.attachTypes(WadlGeneratorJAXBGrammarGenerator.java:481)
    at org.glassfish.jersey.server.wadl.internal.WadlBuilder.generate(WadlBuilder.java:122)
    at org.glassfish.jersey.server.wadl.internal.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.java:131)
    at org.glassfish.jersey.server.wadl.internal.WadlApplicationContextImpl.getApplication(WadlApplicationContextImpl.java:150)
    at org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler.apply(WadlModelProcessor.java:134)
    at org.glassfish.jersey.server.wadl.processor.WadlModelProcessor$OptionsHandler.apply(WadlModelProcessor.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) …
Run Code Online (Sandbox Code Playgroud)

java netbeans glassfish cdi jersey-2.0

6
推荐指数
1
解决办法
3265
查看次数

使用生产者方法的Java EE产生'WELD-001408不满意的依赖...'异常

那里,

我对Java EE和CDI非常新鲜.我尝试设置一个测试项目,以便使用JAX-RS和CDI完成我的第一步.我通过提供beans.xml来启用CDI.只要我测试,我就使用bean-discovery-mode ="all"元素.CDI似乎工作正常,因为我可以成功地将BeanManager注入我的测试资源,并且我可以输出它发现的所有bean.

我尝试注入一个由producer方法提供的类.Netbeans向我显示了对provideMe字段的警告: 没有找到符合注入bean条件的资源

当我将应用程序部署到Glassfish时,我得到了焊接异常:

WELD-001408 Unsatisfied dependencies for type [ProvideMeInterface] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private com.test.rest.DataImport.provideMe]
Run Code Online (Sandbox Code Playgroud)

这是我的这个小测试的类:

接口:

package com.test.orm;
public interface ProvideMeInterface
{
    int getCount();
}
Run Code Online (Sandbox Code Playgroud)

执行:

package com.test.orm;
public class ProvideMeImpl implements ProvideMeInterface {

    int cnt;
    ProvideMeImpl(int cnt)
    {
        this.cnt = cnt;
    }

    @Override
    public int getCount() {
        return cnt;
    }
}
Run Code Online (Sandbox Code Playgroud)

制片人:

package com.test.orm;

import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.Produces;

public class ProvideMeProvider {

  @Produces
  @ApplicationScoped  
  public ProvideMeInterface produceFactory() {
      return new …
Run Code Online (Sandbox Code Playgroud)

netbeans glassfish java-ee cdi weld2

5
推荐指数
1
解决办法
860
查看次数

注入 Jersey 资源,HK2 在 Java SE 中运行时进行注入而不是 Weld -&gt; 依赖关系不满足

我有一个简单的测试应用程序,我将其部署到 GlassFish(只有一个资源注入了一个简单的类)。在 GlassFish 上,一切工作正常(除了记录 FINE 时的例外情况,请参阅此处)。我可以成功调用资源,并且 Weld CDI 正在执行注入。

现在,当我在 Java SE 中启动应用程序以使用 JUnit 进行单元测试时,HK2 似乎正在尝试提供注入,这会导致 UnsatisfiedDependencyException。

我可以定义一个 AbtractBinder 来绑定 InjectMe 类,以便 HK2 知道它。然后注射就可以正常工作了。但 Weld CDI 应该将该类注入 Jersey 资源,而不是 HK2。

引导是通过创建自定义 JUnit 运行程序 (WeldJUnit4Runner) 和@RunWith(WeldJUnit4Runner.class)注释来完成的,有关示例,请参见此处:http ://blog.rocketscience.io/dependency-injection-with-cdi-in-java-se/

Weld CDI 已成功引导到 Java SE 环境,我可以成功地将 InjectMe 类注入到实际的 JUnit 测试类中,而不是注入到 Jersey 资源中。InjectMe 类是通过 Weld 引导发现的:

2014-07-16 10:41:12,730 [DEBUG] org.jboss.weld.Bootstrap - WELD-000106: Bean: Managed Bean [class com.test.rest.InjectMe] with qualifiers [@Any @Default]
Run Code Online (Sandbox Code Playgroud)

问题:在 Java SE 中运行时,为什么 HK2 尝试注入 InjectMe 类而不是 Weld? …

junit jersey-2.0 weld2 hk2

5
推荐指数
1
解决办法
2609
查看次数

标签 统计

cdi ×2

glassfish ×2

jersey-2.0 ×2

netbeans ×2

weld2 ×2

hk2 ×1

java ×1

java-ee ×1

junit ×1