2014-08-28 1 views
1

쉽게 이해할 수있는 문제에 많은 문제가 있습니다. 내 J2EE 웹 응용 프로그램 (Stateless session bean)에서 외부 JAX-RS 서비스 (mailgun). 저지 통합을 시도했지만 중복 된 가져 오기 (및 NoSuchMethodExceptions 등) 문제가있었습니다. 그래서 저는 이것을 더 이상 추구하지 않고 RestEasy를 대신 사용해 보았습니다. 이것이 Jboss의 표준 JAX-RS 라이브러리라는 것을 알았 기 때문에.JBoss 응용 프로그램 내에서 외부 JAX-RS 서비스를 호출하는 데 문제가 발생했습니다.

그러나 여기에도 문제가 있습니다.

이 서비스를 호출하는 정확한 경로를 가르쳐 주시겠습니까? 나는 어떤 라이브러리를 사용하여 매우 개방적이다, 그래서이 일의 "빌드 -"을 방법이 있는지, 나는 ... 내 현재의 문제의

세부 여기 내 의존성 지옥에 가자 기쁘게 생각합니다 :

을 내 StatelessSessionBean에서이 줄을 호출하고 나면

는 :

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 

내가 내 메이븐 의존성을 많이했다. (다른 사람의 사이에) 현재 버전 참조

jboss-jaxrs-api_1.1_spec 

org.jboss.resteasy, version 3.0.8.Final 

을 나는 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> 

저는 JBoss AS 7.1을 실행하고 있습니다.

미리 감사드립니다.

추신 : 내 응용 프로그램에서 많은 JAX-RS 서비스가 노출되어 잘 작동합니다.

답변

1

"왜 NoClassDefFoundError가 발생합니까?"라는 대답은 "종속성 org.jboss.resteasy.resteasy-jaxrs가 제공된 것으로 표시되어 런타임에 사용할 수 없기 때문에"입니다.

JBoss AS 7.1은 Reaseasy 버전 3.0.8을 사용하지 않습니다 (귀하의 경우 아마도 Resteasy 2.3.5이지만 $ {version.jboss.bom}의 가치는 무엇인지 모르겠습니다. use $ {version.org.jboss.resteasy}의 값을 확인하십시오.

jboss-javaee-6.0-with-resteasy를 pom에 추가하거나 jboss-javaee-6.0-with-all을 사용하십시오 , Resteasy 버전을 직접 설정할 필요가 없습니다. 은 JBoss에서 사용 RESTEasy가의 버전을 업데이트 할 경우에는 옵션 인 경우

, http://docs.jboss.org/resteasy/docs/3.0.8.Final/userguide/html/Installation_Configuration.html#upgrading-as7

를 참조하십시오, 당신은 또한 상자 밖으로 RESTEasy가 3.0.6을 지원 제이보스를 사용할 수 있습니다.