Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Restful XML中获取属性,客户端中不带标记_Java_Xml_Web Services_Rest_Netbeans - Fatal编程技术网

Java 从Restful XML中获取属性,客户端中不带标记

Java 从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

我想从RESTWeb服务创建的XML输出中获取属性值,但Java客户机中没有标记。我尝试了XPath,但它似乎不适用于URL,只适用于存储在驱动器中的XML文件。所有关于XPath的答案都是专门针对非在线存储的XML文件的。我正在使用Netbeans。其概念是,web服务接受两个数字,并以XML形式提供总和。我在本例中使用的Webservice url
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,我当然会接受这个答案。