Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 Web服务和XML文件传输_Java_Web Services_Rest_File Transfer - Fatal编程技术网

JAVA RESTful Web服务和XML文件传输

JAVA RESTful Web服务和XML文件传输,java,web-services,rest,file-transfer,Java,Web Services,Rest,File Transfer,首先,对不起我的英语。第二,我知道有很多关于我将要谈论的内容的现有帖子,但就我所搜索的内容而言,我发现与我的“特定”问题没有任何(真正)相关的内容。我们开始吧 我目前正在开发一个JAVA RESTful web服务。此web服务的目标是向连接的客户端发送一些XML文件(更准确地说,是一些椭圆形定义)。我看到了4个“解决方案”: 将所有XML文件内容放在一个字符串中(如果需要,将该字符串编码为base64),并将该字符串发送给客户端 将所有XML文件内容放在字节[]中,并将字节[]发送给客户端

首先,对不起我的英语。第二,我知道有很多关于我将要谈论的内容的现有帖子,但就我所搜索的内容而言,我发现与我的“特定”问题没有任何(真正)相关的内容。我们开始吧

我目前正在开发一个JAVA RESTful web服务。此web服务的目标是向连接的客户端发送一些XML文件(更准确地说,是一些椭圆形定义)。我看到了4个“解决方案”:

  • 将所有XML文件内容放在一个字符串中(如果需要,将该字符串编码为base64),并将该字符串发送给客户端
  • 将所有XML文件内容放在字节[]中,并将字节[]发送给客户端
  • 使用FTP辅助服务器
  • 通过套接字上的流发送/接收文件(InputStream/OutputStream)
目前,我决定选择4号解决方案。您可以在下面看到我关于文件传输的部分代码


服务器端:

@Path("/sendXML")
@Produces(MediaType.TEXT_PLAIN)
@GET
@Path("/sendXML")
@Produces(MediaType.TEXT_PLAIN)
public String getHtml(@Context HttpServletResponse  serv) throws IOException {
    ServletOutputStream o =serv.getOutputStream();
    try {
        FileInputStream fis = new FileInputStream(new File("xml file to send"));
        int c;

        while ((c = fis.read()) != -1) {
           o.write(c);
        }

        fis.close();
        o.close();
    } catch (Exception e) {
        System.err.println("e");
    } 

    return "OK" ;
}

客户端:

try {
        URL u = new URL("http://localhost:8080/ws.example.filetransfer/rest/sendXML");
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();


        InputStream is = uc.getInputStream();

        try {
            FileOutputStream fos = new FileOutputStream(new File("path where the file will be saved"));
            int c;

            while ((c = is.read()) != -1) {
               fos.write(c);
            }


            is.close();
            fos.close();
        } catch (Exception e) {
            System.err.println("FileStreamsTest: " + e);
        } 

    } catch (Exception e) {
        e.printStackTrace();
    }

我正在Eclipse下开发和测试我的程序。看起来一切正常,XML文件从服务器发送到客户端,并保存在磁盘上。以下是启动客户端程序时的控制台输出(服务器已启动):

你好,泽西 你好,球衣你好,球衣 椭圆形存储库 5.10.1 2012-06-29T05:09:57.714-04:00 [...] 如您所见,当客户端接收XML文件时,它除了将内容写入磁盘(在代码中指定的文件中)之外,还将内容写入标准输出。在stdout上写是一个小问题,因为内容也写在磁盘上,但是这是正常的,还是一种Eclipse错误,还是我的错误

最后,以下是我的问题:

  • 您认为,使用JavaRESTWeb服务传输XML文件的最佳方法是什么
  • 您认为流媒体解决方案是一种好方法吗
  • 我是否已经很好地实现了这个解决方案(我对一些代码有疑问,比如使用@Contex属性)
感谢大家的关注和回答! 海森89

<?xml version="1.0"?><hello> Hello Jersey</hello>
<html> <title>Hello Jersey</title><body><h1>Hello Jersey</body></h1></html> 
<?xml version="1.0" encoding="UTF-8"?>
<oval_definitions xsi:schemaLocation="http://oval.mitre.org/XMLSchema/oval-  definitions-5 oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#hpux hpux-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#unix unix-definitions-schema.xsd" xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5" xmlns:oval-def="http://oval.mitre.org/XMLSchema/oval-definitions-5">
<generator>
<oval:product_name>The OVAL Repository</oval:product_name>
<oval:schema_version>5.10.1</oval:schema_version>
<oval:timestamp>2012-06-29T05:09:57.714-04:00</oval:timestamp>
</generator>
[...]