Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
нужен стек ошибки, так как сам веб-сервис с вероятностью 0,99 - принимает файл, скорее всего падает его обработка.Подскажите, как это преодолеть?
Веб сервис не хочет принимать файлы больше 3мб, пишет ошибка java.lang.outOfMemoryError
помимо домины что-то есть в цепочке от сервера к клиенту?Проблема возникает на клиенте. серверный агент отправляет и 12 мб файл.
Однако это происходит довольно медленно секунд 40, внутри сети.
Подскажите пожалуйста, медленная скорость отправки обусловлена технологией или можно как то увеличить?
ничего не понял, можно блоксхему?сервер отправляет и 12мб файлы, с клиента больше 3мб - пишет ошибку
между клиентом и сервером 1 узел, пинги идут 1мс.
если сохранять документ в базу на сервере - сохраняется моментом через интерфейс клиента.
а вот скорость отправки веб-сервисом оставляет ждать лучшего.
веб сервис - на лотусскрипте. Пока непонятно, поможет ли переписать вызовы на java или делать свою реализацию через java классы.
отправляется файл в base64, чем больше файл тем больше задержка (нелинейно)
настроил провайдера в soapui для теста, принимает вот такого типа
Посмотреть вложение 70752
base64 в схеме плохо работает кмкможет банально память течет? что в коде отправки?
ну и что в
JavaEnableJIT=
JavaMaxHeapSize=
JavaDebugString=-XX:MaxPermSize
да там гадание на кофейной, тыкать пальцем куда хочешь)base64 в схеме плохо работает кмк
но память увеличить надо, но я так и не понял - где и как бинарник оборачивают - тоже не понял (кода нет)
base64 в ЛС всегда был лютым п@здецом уже несколько либ пилили (на nsftool втч)
Зная IBM, скорее всего, для парсинга SOAP сообщения через LotusScript используется именно DOM из Java.
вот, да, сразу уйдёт гимор с base64Ещё вариант - если файлы загружают пользователи "ручками", нажимая какие-то кнопки в интерфейса, вообще убрать клиентскую часть. Сделать на сервере XPages страничку с интерфейсом загрузки файла. Грузить файлы через браузер.
а вот это может гавкнуться по блокировкам в статиках (если не дожидаться GC агента)виде агента с использованием SAX/StAX, может быть JAXB
а вот этот момент, учитывая сказанное @savl будет не совсем простымПервое, самое простое - увеличить память для Java на клиенте
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex" rendered="false"
viewState="nostate" disableTheme="true">
<xp:this.afterRenderResponse><![CDATA[#{javascript:var exCon:javax.faces.context.ExternalContext = null;
try{
importPackage( lmike.org);
exCon = facesContext.getExternalContext();
//var response:javax.servlet.http.HttpServletResponse = externalContext.getResponse();
//var response = exCon.getResponse().getDelegate();
var batch=paramValues.get("id");
var batchChecker:BatchChecker=new BatchChecker
var status=batchChecker.getBatch(batch==null?batch:batch.toString());//, response);
exCon.getResponse().setStatus(status);
}catch(e){
_dump(e);
print("<<batchcheck.xsp>>"+e.toString());
org.openntf.domino.xsp.XspOpenLogUtil.logError(e);
if (exCon!=null)exCon.getResponse().setStatus(500)
}
}]]></xp:this.afterRenderResponse>
<xe:restService id="BatchCheckService" pathInfo="BatchCheckService"
rendered="false" preventDojoStore="true" disableTheme="true">
<xe:this.service>
<xe:customRestService
serviceBean="com.setralubs.BatchCheckService"
contentType="application/json">
</xe:customRestService>
</xe:this.service>
</xe:restService>
</xp:view>
Const xsp = "/__432582C8005FD4C4.nsf/batchcheck.xsp"
Const XLSXtype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Const LinkBase = "https://" & dominoServer & xsp & "?id"
Const checkService = xsp & "/BatchCheckService?exists=true"
import com.ibm.xsp.webapp.XspHttpServletResponse;
......
import org.apache.commons.io.IOUtils;
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.net.HttpURLConnection;
import java.util.*;
import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import org.openntf.domino.*;
import org.openntf.domino.utils.Factory;
......
public class BatchChecker {
private final String classID="::"
+ new Throwable().getStackTrace()[0].getClassName() + "::";
@ExcelCellName("Material")
String fusion;
@ExcelCellName("Material Description")
String prodName_Pack;
@ExcelCellName("Batch")
String batch;
private Session ses;
private Database db;
private View view;
private PrintWriter opw;
private OutputStream os;
private ZipOutputStream append;
public BatchChecker() {
ses = Factory.getSession();
db = ses.getCurrentDatabase();
view = db.getView("batches");
}
.....
/**
* process input and write result as zip to output
*/
public int checking2ZIP(){
Throwable throwable = new Throwable();
int status=HttpURLConnection.HTTP_INTERNAL_ERROR;
InputStream is=null;
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ex = fc.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ex.getRequest();
try {
is=request.getInputStream();
status=HttpURLConnection.HTTP_NOT_FOUND;
if( is!=null
&& request.getContentType()!=null
&& request.getContentType().contains(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
)
.......
try {
is=request.getInputStream();
status=HttpURLConnection.HTTP_NOT_FOUND;
if( is!=null
&& request.getContentType()!=null
&& request.getContentType().contains(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
)
{
XspHttpServletResponse xspResponse = (XspHttpServletResponse) ex.getResponse();
javax.servlet.http.HttpServletResponse response=xspResponse.getDelegate();
String type=MIMEType.get("zip");
response.setHeader("Content-Type",type);
response.setHeader("Content-Disposition","attachment; filename=allFiles.zip");
this.os =response.getOutputStream();
append = new ZipOutputStream(os);
//PoijiOptions options = PoijiOptionsBuilder.settings().sheetIndex(0).build();
Poiji.fromExcel(is, PoijiExcelType.XLSX, BatchChecker.class, this::add2Zip);//, options, this::dbCheck);
append.finish();
status=HttpURLConnection.HTTP_OK;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.logging.Level;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openntf.domino.xsp.XspOpenLogUtil;
import com.ibm.domino.services.ServiceException;
import com.ibm.domino.services.rest.RestServiceEngine;
import com.ibm.xsp.extlib.component.rest.CustomService;
import com.ibm.xsp.extlib.component.rest.CustomServiceBean;
public class BatchCheckService extends CustomServiceBean {
private final String classID="::"
+ new Throwable().getStackTrace()[0].getClassName() + "::";
@Override
public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
try {
Throwable throwable = new Throwable();
super.renderService(service, engine);
HttpServletRequest request = engine.getHttpRequest();
HttpServletResponse response = engine.getHttpResponse();
PrintWriter writer = response.getWriter();
//JsonJavaObject jo = new JsonJavaObject();
boolean exists=request.getParameter("exists")!=null;
//System.out.println("id length: "+id.length());
BatchChecker obj=new BatchChecker();
response.setHeader("Content-Type", "application/json; charset=UTF-8");
writer.write("{\"body\": \"");
if(request.getContentType()!=null && request.getContentType().contains(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
)
){
//String ext=MIMEType.getKey(request.getContentType());
InputStream bodyIs=request.getInputStream();
......
obj.checking(bodyIs, writer, exists);
}else //if(request.getContentType().contains("application/json"))
{
obj.testCheckingOut(writer);
}
writer.write("\"}");
writer.close();
тоже вариант , но там (если про ЛС) свои заморочки будутПо итогу отказались от встроенных веб сервисов.
Написали на httprequest и работает.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!