Configuration WSO2 APIM和BAM-如何解决空值问题?

Configuration WSO2 APIM和BAM-如何解决空值问题?,configuration,wso2,Configuration,Wso2,我正在使用WSO2 API Manager 1.6.0和BAM 2.4.0 尝试收集统计数据时,我在BAM中遇到以下错误: TID: [0] [BAM] [2014-02-13 10:46:17,841] ERROR {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation} - Failed to write data to database {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DB

我正在使用WSO2 API Manager 1.6.0和BAM 2.4.0

尝试收集统计数据时,我在BAM中遇到以下错误:

TID: [0] [BAM] [2014-02-13 10:46:17,841] ERROR {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation} -  Failed to write data to database {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation}
java.sql.SQLException: Cannot insert the value NULL into column 'consumerKey', table 'wso2_regdb.dbo.API_REQUEST_SUMMARY'; column does not allow nulls. INSERT fails.
        at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
        at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
        at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
        at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
        at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:613)
        at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:572)
        at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:727)
        at org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation.insertData(DBOperation.java:175)
        at org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation.writeToDB(DBOperation.java:63)
        at org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBRecordWriter.write(DBRecordWriter.java:35)
        at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:589)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
        at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
        at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
        at org.apache.hadoop.hive.ql.exec.GroupByOperator.forward(GroupByOperator.java:964)
        at org.apache.hadoop.hive.ql.exec.GroupByOperator.closeOp(GroupByOperator.java:1016)
        at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:557)
        at org.apache.hadoop.hive.ql.exec.ExecReducer.close(ExecReducer.java:304)
        at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:528)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:419)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:257)
我意识到我可以简单地允许consumerkey允许空值……但是更新WSo2定义的DDL似乎是个坏主意

我认为这可能与API管理器在尝试使用“tryit”功能时遇到的问题有关,并且没有正确接收密钥。我会得到一个错误:

TID: [0] [AM] [2014-02-13 14:25:02,513] ERROR {org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler} -  API authentication failure {org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler}
org.wso2.carbon.apimgt.gateway.handlers.security.APISecurityException: Access failure for API: /APIPhoneVerify, version: 2.0.0 with key: null
我以前发布过“tryit”问题,并被告知根据以下内容更新我的配置:我做了,但没有帮助


有没有关于如何为BAM清除此错误的想法?和/或修复“tryit”功能?

尝试使用tryit功能访问API时,似乎会插入空值。这将发送一个飞行前选项请求,以查看是否允许浏览器访问资源,并且此请求不会随附访问令牌。因为它是通过访问令牌派生的,所以当选项请求通过网关时,将无法找到与其关联的使用者密钥-因此将向BAM推送空值。这似乎是一个bug,您可以在上报告此问题


但是,空值插入对调用API没有任何影响。根据提供的错误,从tryit发送的请求(实际请求,而不是飞行前的请求)似乎没有发送访问令牌。

因此无法清除记录,BAM将停止尝试处理它。这些值保存在一个名为org_wso2_apimgt_statistics_request的cassandra列族中。目前无法通过BAM接口修改柱族。或者,您可以使用Apache Cassandra提供的cqlsh,连接到BAM的嵌入式Cassandra存储,并从org_wso2_apimgt_statistics_request列族中删除所有空值。之后,您可能必须删除配置单元脚本创建的所有元数据表,如(更改数据库部分)中所述