注入HttpRequest时出现Nullpointer异常

时间:2016-04-23 15:23:32

标签: jax-rs cdi ibm-cloud websphere-liberty session-cache

我在Bluemix上有一个Liberty JAX-RS 2.0应用程序。我的目标是使用Bluemix会话缓存服务作为中央会话存储。

在我的界面中,我像这样注入HttpRequest对象:

@Path("/resource")
public class MyResource {

   @Post
   public Response myOperation(..., @Context final HttpServletRequest httpRequest) {
     ...
   }
}

只运行Liberty就可以运行(在Bluemix上没有Session Cache Binding)。我甚至无法访问测试应用中的httpRequest,也无法访问httpRequest.getSession()。一旦我将会话缓存服务绑定到Liberty App并重新启动应用程序,我在调用API时会收到以下信息:

  

显示java.lang.NullPointerException:   在com.ibm.ws.xs.sessionmanager.IBMHttpSessionListener.attributeAdded(IBMHttpSessionListener.java:265)   在com.ibm.ws.session.http.HttpSessionAttributeObserver.sessionAttributeSet(HttpSessionAttributeObserver.java:141)   在[内部班级]   at org.jboss.weld.context.AbstractConversationContext.copyConversationIdGeneratorAndConversationsToSession(AbstractConversationContext.java:188)   at org.jboss.weld.context.AbstractConversationContext.sessionCreated(AbstractConversationContext.java:196)   在org.jboss.weld.servlet.ConversationContextActivator.sessionCreated(ConversationContextActivator.java:190)   在[内部课程]

根据要求提供server.xml - 由Bluemix在部署时生成。

<server>
<featureManager>
    <feature>jaxrs-2.0</feature>
    <feature>jsonp-1.0</feature>
    <feature>couchdb-1.0</feature>
    <feature>ejb-3.2</feature>
    <feature>cdi-1.2</feature>
    <feature>icap:managementConnector-1.0</feature>
    <feature>appstate-1.0</feature>
    <feature>cloudAutowiring-1.0</feature>
    <feature>eXtremeScale.webapp-1.1</feature>
</featureManager>
<application name='myapp' location='myapp.war' type='war' context-root='some-app'>
    <classloader commonLibraryRef='cloudantNoSQLDB-library'/>
</application>
<cdi12 enableImplicitBeanArchives='false'/>
<httpEndpoint id='defaultHttpEndpoint' host='*' httpPort='${port}'/>
<webContainer trustHostHeaderPort='true' extractHostHeaderPort='true'/>
<include location='runtime-vars.xml'/>
<logging logDirectory='${application.log.dir}' consoleLogLevel='INFO'/>
<httpDispatcher enableWelcomePage='false'/>
<applicationMonitor dropinsEnabled='false' updateTrigger='mbean'/>
<config updateTrigger='mbean'/>
<appstate appName='myapp' markerPath='${home}/../.liberty.state'/>
<couchdb id='cloudantNoSQLDB-ith-auth-db' jndiName='couchdb/ith-auth-db' libraryRef='cloudantNoSQLDB-library' username='${cloud.services.ith-auth-db.connection.username}' password='${cloud.services.ith-auth-db.connection.password}' url='${cloud.services.ith-auth-db.connection.url}' enableSSL='true' host='${cloud.services.ith-auth-db.connection.host}' port='${cloud.services.ith-auth-db.connection.port}'/>
<library id='cloudantNoSQLDB-library'>
    <fileset id='cloudantNoSQLDB-fileset' dir='${server.config.dir}/lib' includes='commons-codec-1.6.jar commons-io-2.0.1.jar commons-logging-1.1.3.jar httpclient-4.3.6.jar httpclient-cache-4.3.6.jar httpcore-4.3.3.jar jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.jar jcl-over-slf4j-1.6.6.jar org.ektorp-1.4.2.jar slf4j-api-1.6.6.jar slf4j-jdk14-1.6.6.jar'/>
</library>
<xsWebApp id='session-cache' objectGridName='${cloud.services.session-cache.connection.gridName}' catalogHostPort='${cloud.services.session-cache.connection.catalogEndPoint}' credentialGeneratorClass='com.ibm.websphere.objectgrid.security.plugins.builtins.UserPasswordCredentialGenerator' credentialGeneratorProps='${cloud.services.session-cache.connection.username} ${cloud.services.session-cache.connection.password}' objectGridType='REMOTE' securityEnabled='true'/>

所以我猜注入HttpRequest会出现问题...我该如何解决?

0 个答案:

没有答案