Java webResource.get(String.class)返回null

Java webResource.get(String.class)返回null,java,web-services,rest,jersey,webresource,Java,Web Services,Rest,Jersey,Webresource,我创建了一个Jersey客户端程序来使用返回XML的RESTWeb服务 Client client = Client.create(); WebResource webResource = client.resource("http://xyz:abc/myRestservice/getval"); 我使用webResource get方法将返回值存储在字符串变量中: String s = webResource.get(String.class); 我没有错误。但变量“s”的输出显示为nu

我创建了一个Jersey客户端程序来使用返回XML的RESTWeb服务

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服务时(使用JDeveloperIDE而不使用客户端程序),它返回值


更新:

我发现变量“s”显示为null,因为web服务程序中存在异常(解释如下)

web服务程序使用不透明(OracleTypes.opaque)变量来存储从ORACLE数据库中存储的函数检索到的XMLTYPE值。然后,不透明变量是 使用强制转换指定给新的XMLType。在JDeveloperIDE内部weblogic服务器中进行测试时,这会以某种方式起作用。 但是,当我在远程weblogic服务器中部署此web服务并尝试使用客户端程序时,它不起作用。 我得到一个异常——“oracle.sql.OPAQUE不能转换为oracle.xdb.XMLType”


我猜最可能是由于远程weblogic服务器中缺少一些Jar,但不确定是哪个Jar。

您就快到了。您真正应该做的是获取ClientResponse.class,而不是String.class

以下是一个示例:

ClientResponse response = webResource.get(ClientResponse.class);
String responseString = response.getEntity(String.class);
一旦您开始使用这个jersey rest客户端,您将更加了解每个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);
其中:

请求类型(RESTAPI在主体中期望的数据格式)是:“application/json”和 响应类型(RESTAPI返回的数据格式)是:“application/xml”

注意,我使用了
POST
(.POST方法)而不是get,因为在正常的
get
请求中,不需要主体(因此不需要请求类型)。
POST
示例仅供参考。对于
GET
,您仍然需要响应类型,大致如下:

ClientResponse response = webResource.accept(MediaType.APPLICATION_XML).get(ClientResponse.class);
String responseStringXML = response.getEntity(String.class);

我希望这有帮助

谢谢你提供的有用信息。请找到我的最新问题。