我想創建一個命令行Java程序,它必須訪問某些REST服務。我提到了使用自動裝配完成相同功能的其中一種彈簧webapp。我可以在webapp的spring配置文件中看到下面的內容。從命令行程序訪問REST服務的問題
<bean id="jacksonJsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
<util:list id="webClientProviders">
<ref bean="jacksonJsonProvider"/>
</util:list>
<bean id="jsonWebClient" class="org.apache.cxf.jaxrs.client.WebClient" factory-method="create">
<constructor-arg type="java.lang.String" value="http://localhost:8080/"/>
<constructor-arg ref="webClientProviders" />
</bean>
這告訴我,春天會創建一個使用參數「http://localhost:8080/」,並具有JacksonJsonProvider的實例列表的WbClient的實例。我的理解是否正確?
我也在webapp代碼中看到下面的用法。
@Controller
public class ABController {
@Autowired
@Qualifier("jsonWebClient")
private WebClient webclient;
@RequestMapping(value = "/abc.action", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public String getABCD(HttpServletRequest request, HttpServletResponse response) {
...
...
WebClient wc = WebClient.create(webclient.getBaseURI());
wc.path("abcdservices/rest/restservices/cart/gettotal");
Response res = wc.get();
...
...
}
}
但是,當我做同樣的在我的Java程序,如下圖所示(和一些變種):
List<Object> providers = new ArrayList<Object>();
JacksonJsonProvider j = new JacksonJsonProvider();
providers.add(j);
WebClient webclient = WebClient.create("http://localhost:8080/",
providers);
WebClient wc = webclient.create(webclient.getBaseURI());
wc.path("crmitsm/rest/cirestservices/crmitsm/warrantystatus");
Response res = wc.get();
我得到下面的異常/錯誤。
java -jar target/CmdLine-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Exception in thread "main" java.lang.NullPointerException
at org.apache.cxf.jaxrs.client.AbstractClient.setupOutInterceptorChain(AbstractClient.java:887)
at org.apache.cxf.jaxrs.client.AbstractClient.createMessage(AbstractClient.java:958)
at org.apache.cxf.jaxrs.client.WebClient.finalizeMessage(WebClient.java:1118)
at org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1091)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865)
at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:331)
at org.apache.cxf.jaxrs.client.WebClient.get(WebClient.java:357)
at org.CmdLine.App.main(App.java:37)
有沒有人請幫我這裏。我無法理解我在這裏失去的東西。
我想從客戶端程序這是一個簡單的Java應用程序,而不是使用彈簧做到這一點。 – Aniruddha
你可以找到寫CXF webclient的正確方法[這裏](http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-CXFWebClientAPI) – Cyriac