好吧,我在这里搜索了如何在 java 上使用 webservice 上传文件,但没有任何令人满意的答案。我需要构建一个方法来接收一些字符串和文件列表。有人可以指导我如何创建可以上传多个文件的网络服务?
@WebMethod()
public String criarPA(String name, List<File> files)
它是这样的......我已经看到我不能使用文件......那么我可以用什么代替呢?
好吧,我在这里搜索了如何在 java 上使用 webservice 上传文件,但没有任何令人满意的答案。我需要构建一个方法来接收一些字符串和文件列表。有人可以指导我如何创建可以上传多个文件的网络服务?
@WebMethod()
public String criarPA(String name, List<File> files)
它是这样的......我已经看到我不能使用文件......那么我可以用什么代替呢?
您不能使用 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
这是一种方法,您应该发送一个 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) {
“文件”在 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
另一种方法是
您可以使用 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);
}
}
为了更清楚地了解这个过程,请检查这个。