В настоящее время я работаю над веб-сервисом для отправки больших pdf-файлов на сервер с клиента, используя DIME. Я использую реализацию Apache axis2 для поддержки веб-сервиса. Я должен был заставить службу работать, но возникает проблема, когда я пытаюсь отправить вложения размером более 1 МБ, тогда я получаю исключение. Я предполагаю, что мне, вероятно, придется изменить размер моего приложения перед отправкой, но я понятия не имею, где я могу это контролировать, а также я думаю, может быть, это будет другое. Ниже приведен код для клиента, который загружает файлы
public class PdfDriver
{
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
testAddGroup();
}
public static void testAddGroup() throws IOException
{
try
{
PdfMail_ServiceLocator locator = new PdfMail_ServiceLocator();
locator.setPdfMailSOAPEndpointAddress("http://localhost:80/services/PdfMailSOAP");
PdfMail_PortType stub = locator.getPdfMailSOAP();
PdfMailSOAPStub server = null;
server = (PdfMailSOAPStub) stub;
//Test uploading pdf
server._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT, Call.ATTACHMENT_ENCAPSULATION_FORMAT_MTOM);
FileDataSource ds = new FileDataSource("/test.zip");
DataHandler dh = new DataHandler(ds);
server.addAttachment(dh);
System.out.println(server.getTimeout());
Calendar cal = Calendar.getInstance();
long x = cal.getTimeInMillis();
System.out.println("Server: Start receive@ "+ "\n" + server.sendPdf("test.zip") + "\nServer: Finished receive ");
}
catch (ServiceException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И этот код я использую для обработки вложений на стороне сервера
public java.lang.String sendPdf(java.lang.String pdfToSend) throws java.rmi.RemoteException
{
String result = "";
AttachmentPart[] attachments = null;
try
{
attachments = getAttachments();
}
catch (Exception e1)
{
result = "null attachments getAttachments exception";
e1.printStackTrace();
}
if (attachments != null)
{
for (int i = 0; i < attachments.length; i++)
{
AttachmentPart attachment = attachments[i];
try
{
File file = new File(pdfToSend);
InputStream in = attachment.getDataHandler().getInputStream();
OutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) > 0)
out.write(buffer, 0, len);
out.close();
in.close();
result += "File saved on the server\nFile Size : " + (file.length() / 1048576) + "MB \nSend Type : " + this.receivedType;
}
catch (IOException e)
{
result += "exception IO";
e.printStackTrace();
}
catch (SOAPException e)
{
result += "SOAP exception";
e.printStackTrace();
}
}
}
return result;
}
private AttachmentPart[] getAttachments() throws Exception
{
MessageContext msgContext = MessageContext.getCurrentContext();
Message message = msgContext.getRequestMessage();
Attachments attachmentsimpl = message.getAttachmentsImpl();
if (null == attachmentsimpl)
{
return new AttachmentPart[0];
}
int attachmenstCount = attachmentsimpl.getAttachmentCount();
this.receivedType = attachmentsimpl.getSendType();
AttachmentPart attachments[] = new AttachmentPart[attachmenstCount];
Iterator<AttachmentPart> iter = attachmentsimpl.getAttachments().iterator();
int count = 0;
while (iter.hasNext())
{
AttachmentPart part = iter.next();
attachments[count++] = part;
}
return attachments;
}
Если кто-нибудь знает, из-за чего возникнет проблема с AxisFault для файлов размером более 1 МБ, я был бы признателен. Спасибо.