0

好吧,我在这里搜索了如何在 java 上使用 webservice 上传文件,但没有任何令人满意的答案。我需要构建一个方法来接收一些字符串和文件列表。有人可以指导我如何创建可以上传多个文件的网络服务?

@WebMethod()
public String criarPA(String name, List<File> files)

它是这样的......我已经看到我不能使用文件......那么我可以用什么代替呢?

4

4 回答 4

4

您不能使用 File,因为 WebService 中使用的 SOAP 协议没有这种类型。但是你总是可以发送字节数组:

@XmlType
public class SoapFile implements Serializable {

  private String fileName;
  private byte[] fileData;

  public String getFileName() {
     return fileName;
  }

  public void setFileName(String fileName) {
     this.fileName = fileName;
  }

  public byte[] getFileData() {
     return fileData;
  }

  public void setFileData(byte[] fileData) {
     this.fileData = fileData;
  }
}

现在您的代码将如下所示:

@WebMethod
public String criarPA(List<SoapFile> files)

接下来,您只需从使用标准“Java”方式File保存的字节数组创建。SoapFile

于 2013-01-17T14:09:19.807 回答
3

这是一种方法,您应该发送一个 byte[] 列表。如果您想要文件的名称,您也应该添加该属性。

如果您通过 Java 中的 Web 服务传输文件,则需要注意一件重要的事情,您应该启用 MTOM,这可以提高性能。下面是实现为无状态 EJB 的 WS 端点的标头:

@WebService 
@WebContext(contextRoot="FileWS")
@MTOM(enabled=true)
@Stateless
public class FileWS implements IFileWS{

    @WebMethod(operationName = "sendFiles", action = "sendFiles")
    public void sendFiles(@WebParam(name = "name")String name, 
        @WebParam(name = "files")ArrayList<byte[]> files) {
于 2013-01-17T14:59:35.787 回答
1

“文件”在 Java Web 服务中不是受支持的类型。

如果您想了解 Java Web 服务支持的类型,请参阅此页面(第 3.2.3 节使用 Java Web 服务支持的数据类型):http ://docs.oracle.com/cd/B15897_01/web.1012/b14027 /javaservices.htm

我建议你实现一个 web 服务,在服务器端只上传一个文件,然后在客户端你调用这个方法,就像你有文件一样;)

这是一个实现用于上传文件的 Java Web 服务的教程:http: //www.ibm.com/developerworks/library/ws-devaxis2part3/section2.html

于 2013-01-17T14:13:30.463 回答
0

另一种方法是

您可以使用 SAAJ 上传图像。

The SAAJ API allows you to do XML messaging from the Java platform:
By simply making method calls using the SAAJ API, you can read and write
SOAP-based XML messages, and you can optionally send and receive such 
messages over the Internet (some implementations may not support sending
and receiving). 

在此处查看它对文件的工作方式。


创建 AttachmentPart 对象并添加内容:

AttachmentPart attachment = message.createAttachmentPart();

String stringContent = "Update address for Sunny Skies " +
    "Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";
attachment.setContent(stringContent, "text/plain");
attachment.setContentId("update_address");

message.addAttachmentPart(attachment); 

或者

URL url = new URL("http://greatproducts.com/gizmos/img.jpg");
DataHandler dataHandler = new DataHandler(url);
AttachmentPart attachment = message.createAttachmentPart(dataHandler);
attachment.setContentId("attached_image");

message.addAttachmentPart(attachment);

访问 AttachmentPart 对象:

java.util.Iterator iterator = message.getAttachments();
while (iterator.hasNext()) {
    AttachmentPart attachment = (AttachmentPart)iterator.next();
    String id = attachment.getContentId();
    String type = attachment.getContentType();
    System.out.print("Attachment " + id + " has content type " + type);
    if (type.equals("text/plain")) {
    Object content = attachment.getContent();
    System.out.println("Attachment contains:\n" + content);
    }
}

为了更清楚地了解这个过程,请检查这个

于 2013-01-17T14:20:21.520 回答