2016-12-26 208 views
0

我創建使用jaxrs apijaxrs-cfx實施REST客戶端。java.lang.NoSuchMethodError:javax.ws.rs.core.UriBuilder.resolveTemplate()利用CXF JAXRS實施

我使用的依賴管理Maven構建工具,它是這樣的: -

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>io.swagger</groupId> 
    <artifactId>swagger-jaxrs-client</artifactId> 
    <packaging>jar</packaging> 
    <name>swagger-jaxrs-client</name> 
    <version>1.0.0</version> 
    <build> 
    <sourceDirectory>src/main/java</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <!--plugin> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-maven-plugin</artifactId> 
     <version>${jetty-version}</version> 
     <configuration> 
      <webApp> 
      <contextPath>/</contextPath> 
      </webApp> 
      <webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory> 
      <stopPort>8079</stopPort> 
      <stopKey>stopit</stopKey> 
      <httpConnector> 
      <port></port> 
      <idleTimeout>60000</idleTimeout> 
      </httpConnector> 
     </configuration> 
     <executions> 
      <execution> 
      <id>start-jetty</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
       <goal>start</goal> 
      </goals> 
      <configuration> 
       <scanIntervalSeconds>0</scanIntervalSeconds> 
       <daemon>true</daemon> 
      </configuration> 
      </execution> 
      <execution> 
      <id>stop-jetty</id> 
      <phase>post-integration-test</phase> 
      <goals> 
       <goal>stop</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin--> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.9.1</version> 
     <executions> 
      <execution> 
      <id>add-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
       <source>src/gen/java</source> 
       </sources> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>io.swagger</groupId> 
     <artifactId>swagger-jaxrs</artifactId> 
     <scope>compile</scope> 
     <version>${swagger-core-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>${logback-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit-version}</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- CXF Client --> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-rs-client</artifactId> 
     <version>${cxf-version}</version> 
     <scope>compile</scope> 
    </dependency> 

    <!-- CXF server --> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
     <version>${cxf-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-rs-service-description</artifactId> 
     <version>${cxf-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-policy</artifactId> 
     <version>${cxf-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-wsdl</artifactId> 
     <version>${cxf-version}</version> 
     <scope>compile</scope> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
     <id>sonatype-snapshots</id> 
     <url>https://oss.sonatype.org/content/repositories/snapshots</url> 
     <snapshots> 
     <enabled>true</enabled> 
     </snapshots> 
    </repository> 
    </repositories> 
    <properties> 
    <java.version>1.8</java.version> 
    <maven.compiler.source>${java.version}</maven.compiler.source> 
    <maven.compiler.target>${java.version}</maven.compiler.target> 
    <swagger-core-version>1.5.9</swagger-core-version> 
    <jetty-version>9.2.9.v20150224</jetty-version> 
    <jersey2-version>2.22.2</jersey2-version> 
    <junit-version>4.12</junit-version> 
    <logback-version>1.1.7</logback-version> 
    <servlet-api-version>2.5</servlet-api-version> 
    <cxf-version>3.1.6</cxf-version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

和我的客戶端程序是這樣的: -

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 

import com.fasterxml.jackson.core.JsonProcessingException; 

public class PsbClientJAXRS_GET { 


    private final static String RESOURCE_URI = "http://localhost:2525/psb"; 
    public static void main(String[] args) throws JsonProcessingException { 

     Client client = null; 

     WebTarget webTarget = null; 

     client = ClientBuilder.newClient(); 

     webTarget = client.target(RESOURCE_URI).path("/add-psbdata"); 
     webTarget = webTarget.path("/{name}").resolveTemplate("name", "Ram").path("/{id}").resolveTemplate("id", 101); 

     Response response = webTarget.request().get(); 


     if(response.getStatus() == Status.OK.getStatusCode()){ 
      System.out.println("Data Passed Successfully ..... & status code is " + response.getStatus()); 
     } 
     else{ 
      System.out.println("Failed to hit the server. "); 
     } 

    } 

} 

,但是當我使用resolveTemplate()方法我得到的錯誤爲:

Exception in thread "main" java.lang.NoSuchMethodError: javax.ws.rs.core.UriBuilder.resolveTemplate(Ljava/lang/String;Ljava/lang/Object;Z)Ljavax/ws/rs/core/UriBuilder; at org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl.resolveTemplate(ClientImpl.java:403) at org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl.resolveTemplate(ClientImpl.java:396) at com.jaxrs.test.PsbClientJAXRS_GET.main(PsbClientJAXRS_GET.java:37)

請幫我一下這個問題。

回答

0

javax.ws.rs.core.UriBuilder.resolveTemplate(String, object)自JAX-RS 2.0開始提供。 See

您的一些依賴包含JAX-RS 1.0罐。 swagger-jaxrs使用它。將工件名稱更改爲swagger-jersey2-jaxrsSee documentation。您可能需要查看其他依賴項和代碼,以查看此更改是否會影響任何內容

相關問題