2013-03-14 3 views
3

POST 요청을 보내는 방법은 여기 http://docs.neo4j.org/chunked/milestone/server-java-rest-client-example.html 가이드를 따랐습니다. 아래 코드를 사용하면 java.lang.NoSuchMethodError: javax.ws.rs.ext.MessageBodyWriter.isWriteable이라는 오류 메시지가 나타납니다. 사용중인 라이브러리에 문제가있는 것 같습니다. 내가 종속성 또는 무엇을 누락하면 내가 확실하지 오전java.lang.NoSuchMethodError : javax.ws.rs.ext.MessageBodyWriter.isWriteable

public Object getResponse(Object responseClass) { 
    Client client = Client.create(); 

    WebResource webResource = client.resource(getUrl()); 
    ClientResponse response = webResource 
      .type(MediaType.APPLICATION_JSON) 
      .entity(responseClass) 
      .post(ClientResponse.class); 

    if (response.getStatus() != 201) 
     return null; 

    return response.getEntity(responseClass.getClass()); 
} 

...

내 pom.xml 파일이 포함

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-jaxrs</artifactId> 
     <version>1.9.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
     <version>2.1.2</version> 
    </dependency> 

의 pom.xml

<dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.23</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.axis</groupId> 
      <artifactId>axis</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-discovery</groupId> 
      <artifactId>commons-discovery</artifactId> 
      <version>0.4</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.xml</groupId> 
      <artifactId>jaxrpc-api</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>wsdl4j</groupId> 
      <artifactId>wsdl4j</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4.4</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.activation</groupId> 
      <artifactId>activation</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.2</version> 
     </dependency> 

     <!-- Jersey & Jackson --> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-jaxrs</artifactId> 
      <version>1.9.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-xc</artifactId> 
      <version>1.9.12</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-json</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-servlet</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-grizzly2</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>1.17.1</version> 
     </dependency> 

     <!-- Spring, Hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.1.9.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.1.9.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-annotations</artifactId> 
      <version>3.5.6-Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>3.2.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>3.2.1.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.2.0.RELEASE</version> 
     </dependency> 
    </dependencies> 

업데이트(210)는 아래 항목 당신이 당신의 클래스 경로에 다른 javax.ws.rs.ext.MessageBodyWriter 클래스를 가질 것으로 보인다 그것을

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
     <version>2.1.2</version> 
    </dependency> 

답변

3

을 고정 제거하는. 하나는 jsr311-api-0.8.jar에서 가져온 것이고 다른 하나는 jersey-core-1.17.jar에서 가져온 것입니다. 따라서 종속성을 신중하게 관리하십시오.

그런데 JFind (디렉토리/JAR에서 클래스 찾기) 및 jd-gui (JAR 디 컴파일)과 같은 도구를 사용하면 이러한 종류의 문제를 쉽게 해결할 수 있습니다.

다음은 내 JFind 출력입니다 : 코드는이 라이브러리를 모두 필요

ClassName = javax/ws/rs/ext/MessageBodyWriter.class 
JarName = C:\Users\lhuang\.m2\repository\com\sun\jersey\jersey-core\1.17\jersey-core-1.17.jar 
---------------- 
ClassName = javax/ws/rs/ext/MessageBodyWriter.class 
JarName = C:\Users\lhuang\.m2\repository\javax\ws\rs\jsr311-api\0.8\jsr311-api-0.8.jar 
---------------- 
+0

어떤 경우? –

+0

@MinhKieu 어쩌면 충돌을 피하기 위해 패키지의 이름을 바꿀 수 있습니다. jarjar는 이것을위한 도구입니다. https://github.com/shevek/jarjar – longhua

관련 문제