我有一个API,没有问题,提供“将此设为默认版本”复选框未选中,一旦选中我收到此错误
<ams:fault
xmlns:ams="http://wso2.org/apimanager/security">
<ams:code>900906</ams:code>
<ams:message>No matching resource found in the API for the given request</ams:message>
<ams:description>Access failure for API: xxxx/xxxx, version: v0.1 with key: xxxxxx</ams:description>
</ams:fault>
我有什么遗漏的吗?
谢谢,
灰。
编辑 - 额外明细和日志
TID [-1234] [AM] [2014-07-10 13:05:56,238]错误 {} org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler - API身份验证失败org.wso2.carbon.apimgt.gateway.handlers.security.oauth.OAuthAuthenticator.authenticate(OAuthAuthenticator.java:157) org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest(APIAuthenticationHandler.java:92) org.apache.synapse.rest.API.process(API.java:285) org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:83) org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:64) org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220) org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83) org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344) org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168) org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:744)
答案 0 :(得分:0)
更改API后,请保存并发布API。这可能会导致问题。
发布后,您应该看到2套生产网址(一个包含版本,另一个没有版本)。请检查API的API商店中是否有相同的API。
答案 1 :(得分:0)
您首先要通过编辑../repository/conf/log4j.properties文件并重新启动该服务来打开该环境中的有线日志。这将允许您查看网关的初始请求和网关自身(或群集中的其他网关)的请求的请求标头,因为这样可以解决对默认API版本的请求的解决方法。这可以帮助您确定您的Authorization标头值是否实际上是通过身份验证处理程序。
在您看一下之后,请注意,当您发布具有默认版本的API时,您实际上正在为API创建(或更新)两个单独的突触配置:版本化配置和无版本配置。您需要检查后者定义的部分是:
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('https.nio.port')"/>
<send>
<endpoint>
<http uri-template="https://localhost:{uri.var.portnum}/myApi/v1">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
默认情况下,新生成的默认版本定义会尝试将请求发送到localhost,这可能不是您想要的。检查../repository/deployment/synapse-configs/default/api并确保此定义正确。
由于看起来这实际上是一个身份验证错误,您还应该测试一个新的订阅。使用某个订阅者创建新应用程序,订阅API并生成新的访问令牌。我不明白为什么(因为设置默认版本并没有在AM_API表中创建新的API条目),但这可能是由于访问令牌凭据对于默认版本无效,并且生成新的代币应该(理论上)对此进行测试。