Java 从Restful XML中获取属性,客户端中不带标记
我想从RESTWeb服务创建的XML输出中获取属性值,但Java客户机中没有标记。我尝试了XPath,但它似乎不适用于URL,只适用于存储在驱动器中的XML文件。所有关于XPath的答案都是专门针对非在线存储的XML文件的。我正在使用Netbeans。其概念是,web服务接受两个数字,并以XML形式提供总和。我在本例中使用的Webservice urlJava 从Restful XML中获取属性,客户端中不带标记,java,xml,web-services,rest,netbeans,Java,Xml,Web Services,Rest,Netbeans,我想从RESTWeb服务创建的XML输出中获取属性值,但Java客户机中没有标记。我尝试了XPath,但它似乎不适用于URL,只适用于存储在驱动器中的XML文件。所有关于XPath的答案都是专门针对非在线存储的XML文件的。我正在使用Netbeans。其概念是,web服务接受两个数字,并以XML形式提供总和。我在本例中使用的Webservice urlhttp://localhost:8080/WSDemo/rest/book/5/2 RESTWeb服务 ApplicationConfig.ja
http://localhost:8080/WSDemo/rest/book/5/2
RESTWeb服务
ApplicationConfig.java
package wbs;
import java.util.Set;
import javax.ws.rs.core.Application;
import javax.xml.bind.annotation.XmlRootElement;
@javax.ws.rs.ApplicationPath("rest")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(wbs.GenericResource.class);
}
}
package wbs;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.annotation.XmlRootElement;
@Path("book")
public class GenericResource {
@Context
private UriInfo context;
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{n1}/{n2}")
public String getSum(@PathParam ("n1") int a, @PathParam ("n2") int b) {
int c = a+b;
return "<Sum>" + c + "</Sum>";
}
}
package restclient;
import javax.ws.rs.ClientErrorException;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.WebTarget;
public class Sum {
private WebTarget webTarget;
private Client client;
private static final String BASE_URI = "http://localhost:8080/WSDemo/rest/";
public Sum(){
client = javax.ws.rs.client.ClientBuilder.newClient();
webTarget = client.target(BASE_URI).path("book");
}
public <T> T getSum(Class<T> responseType, String n1, String n2) throws ClientErrorException {
WebTarget resource = webTarget;
resource = resource.path(java.text.MessageFormat.format("{0}/{1}", new Object[]{n1, n2}));
return resource.request(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}
public void putXml(Object requestEntity) throws ClientErrorException {
webTarget.request(javax.ws.rs.core.MediaType.APPLICATION_XML).put(javax.ws.rs.client.Entity.entity(requestEntity, javax.ws.rs.core.MediaType.APPLICATION_XML));
}
public void close() {
client.close();
}
}
package com.emmanouil;
import restclient.Sum;
public class RestClient {
public static void main(String[] args) {
Sum client = new Sum();
String response = client.getSum (String.class,"5" , "2");
System.out.println(response);
client.close();
}
}
输出
我想清除标记并得到结果(本例中为7)。当然,我可以修剪字符串或任何其他类似的方式,但这是我不想做的。您是否尝试解析对XML的响应,然后使用java.XML.xpath使用/sum/@aclook将其提取出来?是的,但我找不到将URL用作输入而不是文件路径的方法。如果您或其他任何人能告诉我如何在XPath中使用web服务XML URL,我当然会接受这个答案。