从JBoss应用程序内部调用外部JAX-RS服务时出现问题

从JBoss应用程序内部调用外部JAX-RS服务时出现问题,jboss,maven-2,client,jax-rs,resteasy,Jboss,Maven 2,Client,Jax Rs,Resteasy,我对一些我认为应该简单的事情有很多问题: 在我的J2E web应用程序(无状态会话bean)中,我想调用一个外部JAX-RS服务(mailgun)。 我尝试集成Jersey,但遇到了重叠导入的问题(以及NoSuchMethodException等)。所以我没有进一步研究这个问题,而是尝试了RestEasy,因为我知道这是Jboss的标准JAX-RS库 然而,我在这里也遇到了一些问题 你能告诉我调用这些服务的正确路径吗?我非常开放使用任何库,所以如果有一个“内置”的方式来做这件事,我很高兴在这里放

我对一些我认为应该简单的事情有很多问题: 在我的J2E web应用程序(无状态会话bean)中,我想调用一个外部JAX-RS服务(mailgun)。 我尝试集成Jersey,但遇到了重叠导入的问题(以及NoSuchMethodException等)。所以我没有进一步研究这个问题,而是尝试了RestEasy,因为我知道这是Jboss的标准JAX-RS库

然而,我在这里也遇到了一些问题

你能告诉我调用这些服务的正确路径吗?我非常开放使用任何库,所以如果有一个“内置”的方式来做这件事,我很高兴在这里放弃我的依赖地狱

我目前的问题详情:

一旦我从我的无状态SessionBean调用这一行:

    Client client = ClientBuilder.newClient();
    Response res = client.target("https://api.mailgun.net/v2/samples.mailgun.org" +   "/messages").request(MediaType.APPLICATION_FORM_URLENCODED_TYPE).get();   
第一行已经生成了一个异常:

    JBAS014134: EJB Invocation failed on component EmailService for method public void de.wohnungsheld.weimea.service.EmailService.hasso(): javax.ejb.EJBException: Unexpected Error
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:163) [jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final]
...
Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/client/ClientBuilder
我经常玩我的Maven依赖项。 当前版本引用(除其他外)

我假设org.jboss.resteasy与此处的其他内容发生冲突

“完整依赖项”部分如下所示:

 <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <scope>provided</scope>
  </dependency>

 <dependency>
        <groupId>org.jboss.spec.javax.annotation</groupId>
        <artifactId>jboss-annotations-api_1.1_spec</artifactId>
        <scope>provided</scope>
</dependency>

<dependency>
        <groupId>org.jboss.spec.javax.ws.rs</groupId>
        <artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
        <scope>provided</scope>
</dependency>

<dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Import the EJB API, we use provided scope as the API is included in 
        JBoss AS 7 -->
    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- JSR-303 (Bean Validation) Implementation -->
    <!-- Provides portable constraints such as @Email -->
    <!-- Hibernate Validator is shipped in JBoss AS 7 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Import the JSF API, we use provided scope as the API is included in 
        JBoss AS 7 -->
    <dependency>
        <groupId>org.jboss.spec.javax.faces</groupId>
        <artifactId>jboss-jsf-api_2.1_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Now we declare any tools needed -->

    <!-- Annotation processor to generate the JPA 2.0 metamodel classes for 
        typesafe criteria queries -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Annotation processor that raising compilation errors whenever constraint 
        annotations are incorrectly used. -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Needed for running tests (you may also use TestNG) -->

    <dependency>
          <groupId>com.jayway.restassured</groupId>
          <artifactId>rest-assured</artifactId>
          <version>2.3.2</version>
          <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Optional, but highly recommended -->
    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.protocol</groupId>
        <artifactId>arquillian-protocol-servlet</artifactId>
        <scope>test</scope>
    </dependency>


    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.4.0</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

    <dependency>
        <groupId>org.openestate.is24</groupId>
        <artifactId>ALL</artifactId>
        <version>0.1</version>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>org.picketlink</groupId>
        <artifactId>picketlink</artifactId>
    </dependency>

    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.0.0.CR1</version>
        <scope>provided</scope>
    </dependency>

     <dependency>
       <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>3.0.8.Final</version>
          <type>pom</type>                             
        <scope>provided</scope>
    </dependency>
<dependencyManagement>
    <dependencies>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-javaee-6.0-with-tools</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.picketlink</groupId>
            <artifactId>picketlink-javaee-6.0</artifactId>
            <version>${version.picketlink.javaee.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

javax.enterprise
CDIAPI
假如
org.jboss.spec.javax.annotation
jboss-annotations-api_1.1_规范
假如
org.jboss.spec.javax.ws.rs
jboss-jaxrs-api_1.1_规范
假如
org.hibernate.javax.persistence
hibernate-jpa-2.0-api
假如
org.jboss.spec.javax.ejb
jboss-ejb-api_3.1_规范
假如
org.hibernate
休眠验证器
假如
org.slf4j
slf4j api
org.jboss.spec.javax.faces
jboss-jsf-api_2.1_规范
假如
org.hibernate
冬眠
假如
org.hibernate
hibernate验证程序注释处理器
假如
com.jayway.restassed
放心
2.3.2
测试
朱尼特
朱尼特
测试
org.jboss.arquillian.junit
arquillian junit容器
测试
org.jboss.arquillian.protocol
arquillian协议servlet
测试
com.fasterxml.jackson.datatype
jackson-datatype-hibernate4
2.4.0
org.codehaus.jackson
jackson core asl
1.9.13
org.openestate.is24
全部的
0.1
聚甲醛
org.picketlink
尖桩
org.jboss.logging
jboss日志
3.0.0.CR1
假如
org.jboss.resteasy
resteasy jaxrs
3.0.8.1最终版本
聚甲醛
假如
依赖关系管理如下所示:

 <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <scope>provided</scope>
  </dependency>

 <dependency>
        <groupId>org.jboss.spec.javax.annotation</groupId>
        <artifactId>jboss-annotations-api_1.1_spec</artifactId>
        <scope>provided</scope>
</dependency>

<dependency>
        <groupId>org.jboss.spec.javax.ws.rs</groupId>
        <artifactId>jboss-jaxrs-api_1.1_spec</artifactId>
        <scope>provided</scope>
</dependency>

<dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Import the EJB API, we use provided scope as the API is included in 
        JBoss AS 7 -->
    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- JSR-303 (Bean Validation) Implementation -->
    <!-- Provides portable constraints such as @Email -->
    <!-- Hibernate Validator is shipped in JBoss AS 7 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Import the JSF API, we use provided scope as the API is included in 
        JBoss AS 7 -->
    <dependency>
        <groupId>org.jboss.spec.javax.faces</groupId>
        <artifactId>jboss-jsf-api_2.1_spec</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Now we declare any tools needed -->

    <!-- Annotation processor to generate the JPA 2.0 metamodel classes for 
        typesafe criteria queries -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Annotation processor that raising compilation errors whenever constraint 
        annotations are incorrectly used. -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Needed for running tests (you may also use TestNG) -->

    <dependency>
          <groupId>com.jayway.restassured</groupId>
          <artifactId>rest-assured</artifactId>
          <version>2.3.2</version>
          <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Optional, but highly recommended -->
    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.protocol</groupId>
        <artifactId>arquillian-protocol-servlet</artifactId>
        <scope>test</scope>
    </dependency>


    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.4.0</version>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

    <dependency>
        <groupId>org.openestate.is24</groupId>
        <artifactId>ALL</artifactId>
        <version>0.1</version>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>org.picketlink</groupId>
        <artifactId>picketlink</artifactId>
    </dependency>

    <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>3.0.0.CR1</version>
        <scope>provided</scope>
    </dependency>

     <dependency>
       <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>3.0.8.Final</version>
          <type>pom</type>                             
        <scope>provided</scope>
    </dependency>
<dependencyManagement>
    <dependencies>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-javaee-6.0-with-tools</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-javaee-6.0-with-hibernate</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.picketlink</groupId>
            <artifactId>picketlink-javaee-6.0</artifactId>
            <version>${version.picketlink.javaee.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

org.jboss.bom
jboss-javaee-6.0-with-tools
${version.jboss.bom}
聚甲醛
进口
org.jboss.bom
jboss-javaee-6.0-with-hibernate
${version.jboss.bom}
聚甲醛
进口
org.picketlink
picketlink-javaee-6.0
${version.picketlink.javaee.bom}
聚甲醛
进口
我正在运行JBossAS 7.1

非常感谢

PS:我从我的应用程序中公开了很多JAX-RS服务,效果很好。

如果问题是“为什么我会得到NoClassDefFoundError”,答案是“因为依赖项org.jboss.resteasy.resteasy-jaxrs被标记为已提供,因此在运行时不可用。”

请注意,JBossAS7.1没有使用Reasteasy的3.0.8版本(在您的例子中,可能是Resteasy 2.3.5,但我不知道您使用的${version.JBoss.bom}的值是多少;请检查${version.org.JBoss.Resteasy}的值)

考虑将依赖项jboss-javaee-6.0-with-resteasy添加到pom中,或者使用jboss-javaee-6.0-with-all,这样您就不需要自己设置resteasy的版本

如果要更新JBoss中使用的Resteasy版本,请参阅

如果这是一个选项,您还可以使用WildFly,它支持Resteasy 3.0.6开箱即用