我创建了一个Jersey客户端程序来使用返回XML的REST Web服务。
Client client = Client.create();
WebResource webResource = client.resource("http://xyz:abc/myRestservice/getval");
我使用webResource get方法将返回值存储在字符串变量中:
String s = webResource.get(String.class);
我没有错误。但变量" s"将null显示为输出:
System.out.println("- "+s);
输出:
-
Process exited with exit code 0.
当我在本地测试相同的Web服务时(使用没有客户端程序的JDeveloper IDE),它会返回值。
更新
我发现变量" s"由于Web服务程序中的异常(如下所述),它显示为null。
Web服务程序使用opaque(OracleTypes.OPAQUE)变量来存储从ORACLE数据库中的存储函数检索的XMLTYPE值。然后是不透明变量 使用强制转换分配给新的XMLType。在JDeveloper IDE内部weblogic服务器中进行测试时,这种方式有效。 但是,当我在远程weblogic服务器中部署此Web服务并尝试使用客户端程序时,它不起作用。 我得到一个例外 - " oracle.sql.OPAQUE无法转换为oracle.xdb.XMLType"。
最有可能是因为远程weblogic服务器中的一些Jar丢失了,我猜,但不确定是哪个jar。
答案 0 :(得分:1)
你快到了。你应该做的是获取ClientResponse.class而不是String.class。
以下是一个示例:
ClientResponse response = webResource.get(ClientResponse.class);
String responseString = response.getEntity(String.class);
一旦开始使用这个泽西休息客户端,您将了解每个REST api合约的更多信息,您还必须将“requestType”和“responseAccept”设置为webResource的一部分。没有它,你可能最终还会遇到其他一些奇怪的错误。
这是另一个样本:
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_XML).post(ClientResponse.class);
String responseStringXML = response.getEntity(String.class);
其中:
请求类型(REST API在正文中期望的数据格式)是:“application / json”和 响应类型(REST API返回的数据格式)是:“application / xml”
请注意,我使用POST
(.post方法)而不是get,因为在正常GET
请求中,不期望正文(因此不需要请求类型)。 POST
示例仅供参考。对于GET
,您仍然需要一种响应类型,类似于:
ClientResponse response = webResource.accept(MediaType.APPLICATION_XML).get(ClientResponse.class);
String responseStringXML = response.getEntity(String.class);
我希望有所帮助!