2013-10-17 47 views
0

當前的SAX解析器需要大量的時間(20分鐘)和堆內存(大約400mb)來反序列化來自肥皂服務器的響應。我們的響應XML平均大小爲4 MB。我可以爲Axis 1.4使用不同的解析器嗎?

日誌的一部分,當它運行的應用程序了出來堆低於

DEBUG (org.apache.axis.encoding.DeserializationContext) Pushing handler [email protected] 
DEBUG (org.apache.axis.i18n.ProjectResourceBundle) org.apache.axis.i18n.resource::handleGetObject(newElem00) 
DEBUG (org.apache.axis.message.MessageElement) New MessageElement ([email protected]) named {}name 
DEBUG (org.apache.axis.encoding.DeserializationContext) Pushing element name 
DEBUG (org.apache.axis.utils.NSStack) NSPush (32) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Exit: DeserializationContext::startElement() 
DEBUG (org.apache.axis.encoding.DeserializationContext) Enter: DeserializationContext::endElement(, name) 
DEBUG (org.apache.axis.i18n.ProjectResourceBundle) org.apache.axis.i18n.resource::handleGetObject(popHandler00) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Popping handler [email protected] 
DEBUG (org.apache.axis.utils.NSStack) NSPop (32) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Popped element stack to org.apache.axis.message.MessageElement:property 
DEBUG (org.apache.axis.encoding.DeserializationContext) Exit: DeserializationContext::endElement() 
DEBUG (org.apache.axis.encoding.DeserializationContext) Enter: DeserializationContext::startElement(, value) 
DEBUG (org.apache.axis.i18n.ProjectResourceBundle) org.apache.axis.i18n.resource::handleGetObject(pushHandler00) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Pushing handler [email protected] 
DEBUG (org.apache.axis.i18n.ProjectResourceBundle) org.apache.axis.i18n.resource::handleGetObject(newElem00) 
DEBUG (org.apache.axis.message.MessageElement) New MessageElement ([email protected]) named {}value 
DEBUG (org.apache.axis.encoding.DeserializationContext) Pushing element value 
DEBUG (org.apache.axis.utils.NSStack) NSPush (32) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Exit: DeserializationContext::startElement() 
DEBUG (org.apache.axis.encoding.DeserializationContext) Enter: DeserializationContext::endElement(, value) 
DEBUG (org.apache.axis.i18n.ProjectResourceBundle) org.apache.axis.i18n.resource::handleGetObject(popHandler00) 
DEBUG (org.apache.axis.encoding.DeserializationContext) Popping handler [email protected] 
DEBUG (org.apache.axis.utils.NSStack) NSPop (32) 

我不能用的,因爲技術原因Axis2的。

我試過使用HTTP Commons客戶端而不是HTTP客戶端,但響應時間保持不變。

如何在這種情況下將不同的解析器(例如xerces 2.10.0或xstream 1.3.1?)鏈接到Axis 1.4框架,以便內存管理和響應時間有利?

回答

0

從此鏈接installation 在Axis目錄中,您將找到一個WEB-INF子目錄。該目錄包含一些基本配置信息,但也可用於包含您希望部署的依賴關係和Web服務。

Axis需要能夠找到XML解析器。如果您的應用程序服務器或Java運行時未使Web應用程序可見,則需要下載並添加它。 Java 1.4包含Crimson解析器,所以你可以省略這個階段,儘管Axis團隊更喜歡Xerces。

要添加XML解析器,請獲取您選擇的符合JAXP 1.1 XML的解析器。我們推薦使用xml-xerces發行版的Xerces罐子,儘管其他的主要工作。除非您的JRE或應用程序服務器有其自己的特定要求,否則可以將解析器的庫添加到axis/WEB-INF/lib。本指南中的示例使用Xerces。本指南將xml-apis.jar和xercesImpl.jar添加到AXISCLASSPATH,以便Axis可以找到解析器(請參見下文)。

如果您遇到與Xerces或DOM相關的ClassNotFound錯誤,那麼您沒有安裝XML解析器,或者您的CLASSPATH(或AXISCLASSPATH)變量未正確配置。 爲了使這些示例正常工作,java必須能夠找到axis.jar,commons-discovery.jar,commons-logging.jar,jaxrpc.jar,saaj.jar,log4j-1.2.8.jar(或者其他任何適合您選擇的日誌記錄實現)以及XML解析器jar文件(例如xerces.jar)。這些示例通過將這些文件添加到AXISCLASSPATH,然後在運行時指定AXISCLASSPATH來實現。同樣對於這些示例,我們已將xml-apis.jar和xercesImpl.jar文件複製到AXIS_LIB目錄中。另一種方法是將XML解析器的jar文件直接添加到AXISCLASSPATH變量或將所有這些文件添加到CLASSPATH變量。

在Windows上,可以通過以下方式完成此操作。對於本文檔,我們假設您已經在C:\ axis中安裝了Axis。要將這些信息永久存儲在WinNT/2000/XP中,您需要右鍵單擊「我的電腦」並選擇「屬性」。點擊「高級」選項卡並創建新的環境變量。使用寫字板創建變量字符串並將其粘貼到適當的文本字段通常會更好。

set AXIS_HOME=c:\axis 
set AXIS_LIB=%AXIS_HOME%\lib 
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; 
    %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar; 
    %AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar; 
    %AXIS_LIB%\wsdl4j.jar 

Unix用戶必須做類似的事情。下面我們將AXIS安裝到/ usr/axis並使用bash shell。查看shell的文檔以獲取差異。爲了使變量永久化,您需要將它們添加到您的shell的啓動(點)文件中。再次看到你的shell的文檔。

set AXIS_HOME=/usr/axis 
set AXIS_LIB=$AXIS_HOME/lib 
set AXISCLASSPATH=$AXIS_LIB/axis.jar:$AXIS_LIB/commons-discovery.jar: 
    $AXIS_LIB/commons-logging.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar: 
    $AXIS_LIB/log4j-1.2.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar: 
    $AXIS_LIB/wsdl4j.jar 
export AXIS_HOME; export AXIS_LIB; export AXISCLASSPATH 

使用Axis客戶端代碼,您可以通過輸入

java -cp %AXISCLASSPATH% ... 
+0

由於調用java時選擇AXISCLASSPATH。但由於關鍵性質,我必須改用axis2。 axis2相對較快並且內存密集程度較低。 – NishM

相關問題