2016-06-15 24 views
2

我使用碼頭9.3.9.v20160517在我的嵌入式應用,和我已經配置使用jetty-requestlog.xml像這樣的記錄:當碼頭實際上是嘗試的NullPointerException在RequestLogCollection碼頭9.3.9

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> 

<!-- =============================================================== --> 
<!-- Configure the Jetty Request Log         --> 
<!-- =============================================================== --> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- =========================================================== --> 
    <!-- Configure Request Log for Server       --> 
    <!-- (Use RequestLogHandler for a context specific RequestLog --> 
    <!-- =========================================================== --> 
    <Set name="RequestLog"> 
    <New id="RequestLog" class="org.eclipse.jetty.server.AsyncNCSARequestLog"> 
     <Set name="filename"><Property name="jetty.base" default="." /><Property> 
      <Name>jetty.requestlog.filePath</Name> 
      <Deprecated>requestlog.filename</Deprecated> 
      <Default><Property name="jetty.requestlog.dir" default="/logs"/>/yyyy_mm_dd.request.log</Default> 
     </Property> 
     </Set> 
     <Set name="filenameDateFormat"><Property name="jetty.requestlog.filenameDateFormat" deprecated="requestlog.filenameDateFormat" default="yyyy_MM_dd"/></Set> 
     <Set name="retainDays"><Property name="jetty.requestlog.retainDays" deprecated="requestlog.retain" default="90"/></Set> 
     <Set name="append"><Property name="jetty.requestlog.append" deprecated="requestlog.append" default="true"/></Set> 
     <Set name="extended"><Property name="jetty.requestlog.extended" deprecated="requestlog.extended" default="false"/></Set> 
     <Set name="logCookies"><Property name="jetty.requestlog.cookies" deprecated="requestlog.cookies" default="false"/></Set> 
     <Set name="LogTimeZone"><Property name="jetty.requestlog.timezone" deprecated="requestlog.timezone" default="GMT"/></Set> 
    </New> 
    </Set> 
</Configure> 

然而,在運行時記錄每次我向服務器發出請求時獲得以下NPE的任何內容,即使日誌似乎寫入$jetty.base/logs/2016_06_15.request.log

2016-06-15 22:19:23,302 [eXistThread-29] WARN (HttpChannel.java [handle]:479) - //localhost:8080/exist/apps/dashboard/modules/get-icon.xql?package=http://exist-db.org/apps/eXide 
java.lang.NullPointerException 
    at org.eclipse.jetty.server.RequestLogCollection.log(RequestLogCollection.java:44) ~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpChannel.onCompleted(HttpChannel.java:620) ~[jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:453) [jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) [jetty-server-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) [jetty-io-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) [jetty-util-9.3.9.v20160517.jar:9.3.9.v20160517] 
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92] 

那麼...什麼是造成這些NPE的,我該如何修復它們?

+0

你可以在你打電話給你的地方顯示你的代碼嗎? –

+0

確定代碼在這裏 - https://github.com/adamretter/exist/blob/jetty-9/src/org/exist/jetty/JettyStart.java#L190 – adamretter

+0

RequestLog沒有在您鏈接的源代碼中設置?? –

回答

0

XML load order is bad(請參閱您的源etc/enabled-jetty-config

I mentioned this in an earlier answer

以下是您可以查看此訂單的工作方式。

使用jetty-distribution :-)

# Use a new empty base 
$ cd /path/to/mybase 

# Lets add the modules into this base 
$ java -jar /path/to/jetty-dist/start.jar --add-to-start=annotations,deploy,https,gzip,jmx,requestlog 
INFO: server   initialised (transitively) in ${jetty.base}/start.ini 
INFO: gzip   initialised in ${jetty.base}/start.ini 
INFO: jmx    initialised in ${jetty.base}/start.ini 
INFO: requestlog  initialised in ${jetty.base}/start.ini 
INFO: ssl    initialised (transitively) in ${jetty.base}/start.ini 
INFO: https   initialised in ${jetty.base}/start.ini 
INFO: deploy   initialised in ${jetty.base}/start.ini 
INFO: annotations  initialised in ${jetty.base}/start.ini 
MKDIR: ${jetty.base}/logs 
DOWNLOAD: https://raw.githubusercontent.com/eclipse/jetty.project/master/jetty-server/src/test/config/etc/keystore?id=master to ${jetty.base}/etc/keystore 
MKDIR: ${jetty.base}/webapps 
INFO: Base directory was modified 

# Lets ask the jetty-distribution what its XML load order is 
java -jar /path/to/jetty-dist/start.jar --list-config 
...(snip lots of output)... 
Jetty Active XMLs: 
------------------ 
${jetty.home}/etc/jetty.xml 
${jetty.home}/etc/jetty-gzip.xml 
${jetty.home}/etc/jetty-jmx.xml 
${jetty.home}/etc/jetty-requestlog.xml 
${jetty.home}/etc/jetty-ssl.xml 
${jetty.home}/etc/jetty-ssl-context.xml 
${jetty.home}/etc/jetty-https.xml 
${jetty.home}/etc/jetty-deploy.xml 
${jetty.home}/etc/jetty-plus.xml 
${jetty.home}/etc/jetty-annotations.xml 

注:此加載順序可以(而且確實!)碼頭的版本之間的變化。 不要依賴這是所有版本的Jetty前進的一個真正的加載順序。您或者必須實施相同的start.jar模塊邏輯,或者在項目的每次升級時都要重新執行此jetty-distribution/start.jar --list-config

警告:別這樣,不要混用jetty-distributionembedded-jetty,你只是在創建大量的給自己額外的工作,提高您的維護任務等使用embedded-jetty*或*jetty-distribution直。

+0

我很欣賞你在說什麼,但碼頭分佈並不真的符合我們的項目需求。 jetty-embedded更接近我們所需要的,但我真的很喜歡模塊化XML配置的想法,因爲它允許我們的用戶重新配置碼頭,他們是如何喜歡它。也許我應該放棄模塊化,只需要一個包含所有配置的XML文件? – adamretter

+0

如果我改變你的建議,那麼我就會遇到jetty-jaas.xml和jetty-gzip.xml的問題。 'java.lang.IllegalStateException:沒有LoginService for [email protected]5c3f in [email protected] at org.eclipse.jetty.security.authentication.LoginAuthenticator .setConfiguration(LoginAuthenticator.java:76)' and 'java.lang.ClassCastException:org.eclipse.jetty.server.handler.gzip.GzipHandler無法轉換爲org.eclipse.jetty.server.handler.HandlerCollection ' – adamretter

+0

然後你有2個新問題。 (順便說一句,你的混合方法是什麼導致你的問題。你的'embedded-jetty'假設你的'基於jetty-distribution'的XML不符合) –