为什么在 WSO2 ESB 中我不能创建两个具有相同上下文值的不同 API?
Why in WSO2 ESB I can't create two different APIs having the same context value?
我不太喜欢 WSO2 ESB,我遇到了以下问题。
在我的 ESB 项目中,我有 2 个不同的 API,它们具有 相同的上下文 但处理不同的 URL。
1) 第一个被命名为 CommoditiesInACountry 并且它是这样定义的:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommoditiesInACountry" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodities">
..............................................................
..............................................................
..............................................................
2) 第二个被命名为 CommodityInLocationMarkets 并且它是这样定义的:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommodityInLocationMarkets" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodity/{commodityId}">
..............................................................
..............................................................
..............................................................
所以你可以看到两者具有相同的上下文,其值为 /country 但是 2 APIs 处理不同的 URLs,事实上第一个处理资源 .../country/{localizationId}/commodities 第二个处理资源 .../country/{localizationId}/commodity/ {商品编号}
问题是,当我部署我的 Carbon 应用程序时,我收到以下错误消息,该消息与我有 2 个具有相同上下文值的不同 API 相关:
TID: [-1234] [] [2017-12-01 15:37:31,573] INFO {org.apache.synapse.rest.API} - Initializing API: CommodityInLocationMarkets {org.apache.synapse.rest.API}
TID: [-1234] [] [2017-12-01 15:37:31,573] ERROR {org.apache.synapse.config.SynapseConfiguration} - URL context: /country is already registered with the API: CommoditiesInACountry {org.apache.synapse.config.SynapseConfiguration}
TID: [-1234] [] [2017-12-01 15:37:31,573] ERROR {org.wso2.carbon.rest.api.ApiDeployer} - API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed. {org.wso2.carbon.rest.api.ApiDeployer}
org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
TID: [-1234] [] [2017-12-01 15:37:31,574] ERROR {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - Deployment of the Synapse Artifact from file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed! {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
... 22 more
TID: [-1234] [] [2017-12-01 15:37:31,576] INFO {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - The file has been backed up into : NO_BACKUP_ON_WORKER.INFO {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
TID: [-1234] [] [2017-12-01 15:37:31,576] ERROR {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - Deployment of synapse artifact failed. Error reading /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed. {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:201)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
... 20 more
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
... 22 more
TID: [-1234] [] [2017-12-01 15:37:31,577] ERROR {org.wso2.carbon.application.deployer.internal.ApplicationManager} - Error occurred while deploying Carbon Application {org.wso2.carbon.application.deployer.internal.ApplicationManager}
org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:213)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:201)
... 20 more
Caused by: org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
... 20 more
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
更改已正确部署在我的 Carbon 服务器上的 2 APIs 上下文值之一。
我的问题是我需要这两个 API 的 URL 以 .../country 开头上下文值。
WSO2 ESB 怎么可能不允许两个 API 具有相同的上下文?我怎样才能创建两个不同的 APIs 都具有 URL 像:XXX.YYY.ZZZ.RRR/country/...
是否可以使用 WSO2 ESB?
一个可能的解决方案(如果错误请纠正我)可能是我的 API 有两个不同的联系方式,然后将其映射到 WSO2 API MANAGER 在这里定义最终用户消费的最终 URL。
有什么解决方案?
ESB/APIM 不允许创建具有相同上下文的 2 个 API。但是,您可以使用一个 API 并拥有多个这样的资源。
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommoditiesInACountry" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodities">
................................
................................
</resource>
<resource methods="GET" uri-template="/{localizationId}/commodity/{commodityId}">
................................
................................
</resource>
</api>
相关说明:要遵守 REST 标准,您的第二个资源应该是 /{localizationId}/commodities/{commodityId}
我不太喜欢 WSO2 ESB,我遇到了以下问题。
在我的 ESB 项目中,我有 2 个不同的 API,它们具有 相同的上下文 但处理不同的 URL。
1) 第一个被命名为 CommoditiesInACountry 并且它是这样定义的:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommoditiesInACountry" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodities">
..............................................................
..............................................................
..............................................................
2) 第二个被命名为 CommodityInLocationMarkets 并且它是这样定义的:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommodityInLocationMarkets" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodity/{commodityId}">
..............................................................
..............................................................
..............................................................
所以你可以看到两者具有相同的上下文,其值为 /country 但是 2 APIs 处理不同的 URLs,事实上第一个处理资源 .../country/{localizationId}/commodities 第二个处理资源 .../country/{localizationId}/commodity/ {商品编号}
问题是,当我部署我的 Carbon 应用程序时,我收到以下错误消息,该消息与我有 2 个具有相同上下文值的不同 API 相关:
TID: [-1234] [] [2017-12-01 15:37:31,573] INFO {org.apache.synapse.rest.API} - Initializing API: CommodityInLocationMarkets {org.apache.synapse.rest.API}
TID: [-1234] [] [2017-12-01 15:37:31,573] ERROR {org.apache.synapse.config.SynapseConfiguration} - URL context: /country is already registered with the API: CommoditiesInACountry {org.apache.synapse.config.SynapseConfiguration}
TID: [-1234] [] [2017-12-01 15:37:31,573] ERROR {org.wso2.carbon.rest.api.ApiDeployer} - API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed. {org.wso2.carbon.rest.api.ApiDeployer}
org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
TID: [-1234] [] [2017-12-01 15:37:31,574] ERROR {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - Deployment of the Synapse Artifact from file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed! {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
... 22 more
TID: [-1234] [] [2017-12-01 15:37:31,576] INFO {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - The file has been backed up into : NO_BACKUP_ON_WORKER.INFO {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
TID: [-1234] [] [2017-12-01 15:37:31,576] ERROR {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} - Deployment of synapse artifact failed. Error reading /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed. {org.apache.synapse.deployers.AbstractSynapseArtifactDeployer}
org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:201)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
... 20 more
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
... 22 more
TID: [-1234] [] [2017-12-01 15:37:31,577] ERROR {org.wso2.carbon.application.deployer.internal.ApplicationManager} - Error occurred while deploying Carbon Application {org.wso2.carbon.application.deployer.internal.ApplicationManager}
org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:213)
at org.wso2.carbon.application.deployer.synapse.SynapseAppDeployer.deployArtifacts(SynapseAppDeployer.java:131)
at org.wso2.carbon.application.deployer.internal.ApplicationManager.deployCarbonApp(ApplicationManager.java:272)
at org.wso2.carbon.application.deployer.CappAxis2Deployer.deploy(CappAxis2Deployer.java:72)
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:93)
at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.axis2.deployment.DeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:201)
... 20 more
Caused by: org.apache.synapse.deployers.SynapseArtifactDeploymentException: API deployment from the file : /opt/wso2/wso2ei-6.1.1/wso2/tmp/carbonapps/-1234/1512139051333agrimarketprice-cap_1.0.0.car/CommodityInLocationMarkets_1.0.0/CommodityInLocationMarkets-1.0.0.xml : Failed.
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.handleSynapseArtifactDeploymentError(AbstractSynapseArtifactDeployer.java:474)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:71)
at org.wso2.carbon.rest.api.ApiDeployer.deploySynapseArtifact(ApiDeployer.java:34)
at org.apache.synapse.deployers.AbstractSynapseArtifactDeployer.deploy(AbstractSynapseArtifactDeployer.java:194)
... 20 more
Caused by: org.apache.synapse.SynapseException: URL context: /country is already registered with the API: CommoditiesInACountry
at org.apache.synapse.config.SynapseConfiguration.handleException(SynapseConfiguration.java:1629)
at org.apache.synapse.config.SynapseConfiguration.addAPI(SynapseConfiguration.java:407)
at org.apache.synapse.deployers.APIDeployer.deploySynapseArtifact(APIDeployer.java:59)
更改已正确部署在我的 Carbon 服务器上的 2 APIs 上下文值之一。
我的问题是我需要这两个 API 的 URL 以 .../country 开头上下文值。
WSO2 ESB 怎么可能不允许两个 API 具有相同的上下文?我怎样才能创建两个不同的 APIs 都具有 URL 像:XXX.YYY.ZZZ.RRR/country/...
是否可以使用 WSO2 ESB?
一个可能的解决方案(如果错误请纠正我)可能是我的 API 有两个不同的联系方式,然后将其映射到 WSO2 API MANAGER 在这里定义最终用户消费的最终 URL。
有什么解决方案?
ESB/APIM 不允许创建具有相同上下文的 2 个 API。但是,您可以使用一个 API 并拥有多个这样的资源。
<?xml version="1.0" encoding="UTF-8"?>
<api context="/country" name="CommoditiesInACountry" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/{localizationId}/commodities">
................................
................................
</resource>
<resource methods="GET" uri-template="/{localizationId}/commodity/{commodityId}">
................................
................................
</resource>
</api>
相关说明:要遵守 REST 标准,您的第二个资源应该是 /{localizationId}/commodities/{commodityId}