代码之家  ›  专栏  ›  技术社区  ›  FrancescoAzzola

API管理器创建SOAP API时出错:(双网关)

  •  0
  • FrancescoAzzola  · 技术社区  · 8 年前

    我们使用API Manager 2.1.0进行分布式部署(双网关)。 当我们使用SOAP端点创建SOAP API时,会出现一个错误。 以下是我们在API creator web界面中遵循的步骤:

    1. 创建新API“我有SOAP端点”
    2. 在设计API中,我们添加所需的所有信息并保存

    保存时,导入WSDL时出错:

    ERROR {org.wso2.carbon.apimgt.impl.utils.APIMWSDLReader} -  Error occurred while getting the wsdl address location {org.wso2.carbon.apimgt.impl.utils.APIMWSDLReader}
    java.net.MalformedURLException: no protocol: null/testphone/1.0
        at java.net.URL.<init>(URL.java:593)
        at java.net.URL.<init>(URL.java:490)
        at java.net.URL.<init>(URL.java:439)
        at org.wso2.carbon.apimgt.impl.utils.APIMWSDLReader.setServiceDefinition(APIMWSDLReader.java:307)
        at org.wso2.carbon.apimgt.impl.utils.APIMWSDLReader.updateWSDL(APIMWSDLReader.java:156)
        at org.wso2.carbon.apimgt.impl.utils.APIUtil.createWSDL(APIUtil.java:1375)
        at org.wso2.carbon.apimgt.impl.APIProviderImpl.updateWsdl(APIProviderImpl.java:731)
        at org.wso2.carbon.apimgt.impl.APIProviderImpl.updateAPI(APIProviderImpl.java:836)
        at org.wso2.carbon.apimgt.impl.UserAwareAPIProvider.manageAPI(UserAwareAPIProvider.java:72)
        at org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.saveAPI(APIProviderHostObject.java:1061)
        at org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_updateAPIImplementation(APIProviderHostObject.java:672)
        at sun.reflect.GeneratedMethodAccessor392.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
        at org.mozilla.javascript.FunctionObject.call(FunctionObject.java:386)
    

    并且导入的WSDL(在注册表中)在WSDL:port中的位置有一个null。 如果我们只使用一个网关并导入相同的WSDL,那么就不会出现错误,而且一切都会顺利进行。 这个问题与WSDL无关,它发生在所有WSDL上。 我们如何解决这个问题?

    1 回复  |  直到 8 年前
        1
  •  0
  •   FrancescoAzzola    7 年前

    我们已经解决了这个问题。以下是我们在链接后使用的步骤( https://wso2.org/jira/browse/APIMANAGER-5843 )以及( https://github.com/wso2/carbon-apimgt/pull/4301/commits/c9d38bd0864bc84b3d8f5731ccc6a49068448f33 ):

    1. 下载API Carbon Mgt版本的源代码并找到APIUtil。java(org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java)
    2. 找到方法getGatewayendpoint(String transports),并将其替换为以下代码行:

          public static String getGatewayendpoint(String transports) {
                  String gatewayURLs;
      
                  Map<String, Environment> gatewayEnvironments = ServiceReferenceHolder.getInstance()
                          .getAPIManagerConfigurationService()
                          .getAPIManagerConfiguration()
                          .getApiGatewayEnvironments();
                  if (gatewayEnvironments.size() > 1) {
                   for (Environment environment : gatewayEnvironments.values()) {
                          if (APIConstants.GATEWAY_ENV_TYPE_HYBRID.equals(environment.getType())) {
                              gatewayURLs = environment.getApiGatewayEndpoint(); // This might have http,https
                              // pick correct endpoint
                              return APIUtil.extractHTTPSEndpoint(gatewayURLs, transports);
                          }
                      }
                      for (Environment environment : gatewayEnvironments.values()) {
                          if (APIConstants.GATEWAY_ENV_TYPE_PRODUCTION.equals(environment.getType())) {
                              gatewayURLs = environment.getApiGatewayEndpoint(); // This might have http,https
                           // pick correct endpoint
                              return APIUtil.extractHTTPSEndpoint(gatewayURLs, transports);
                          }
                      }
                      for (Environment environment : gatewayEnvironments.values()) {
                          if (APIConstants.GATEWAY_ENV_TYPE_SANDBOX.equals(environment.getType())) {
                              gatewayURLs = environment.getApiGatewayEndpoint(); // This might have http,https
                              // pick correct endpoint
                              return APIUtil.extractHTTPSEndpoint(gatewayURLs, transports);
                          }
                      }
                  } else {
                      gatewayURLs = ((Environment) gatewayEnvironments.values().toArray()[0]).getApiGatewayEndpoint();
                      return extractHTTPSEndpoint(gatewayURLs, transports);
                  }
      
                  return null;
              }
      
    3. 查找组织。wso2.碳。apimgt公司。impl\u 6.1.66并用新的APIUtil替换该类。Java语言

    4. 根据WSO2文档添加此修补程序

    现在您可以在Mutriple gateway上发布

    推荐文章