问题标签 [service-provider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4570 浏览

java - 简单的Java“服务提供者框架”?

我指的是 Effective Java 第 2 章中讨论的“服务提供者框架” ,这似乎正是处理我遇到的问题的正确方法,我需要在运行时实例化几个类中的一个,基于 aString来选择哪个服务和一个Configuration对象(本质上是一个 XML 片段):

但是我如何让各个服务提供者(例如一堆默认提供者+一些自定义提供者)注册自己?

例如,如果我编写自定义类 MyFooAlgorithm 和 MyFooAlgorithmProvider 来实现 FooAlgorithm,并将它们分发到一个 jar 中,有没有办法让 registerProvider 被自动调用,或者我使用该算法的客户端程序必须显式调用 FooAlgorithmRegistry.registerProvider( ) 对于他们想要使用的每个类?

0 投票
2 回答
546 浏览

clojure - 在 Clojure 中定义 SPI

我正在寻找一种惯用的方式来在 Clojure 中定义一个可以由外部“服务提供者”实现的接口。我的应用程序将在运行时定位并实例化服务提供者模块,并将某些职责委派给它。

例如,假设我正在实现 RPC 机制,并且我希望允许在配置时注入自定义中间件。该中间件可以预处理消息、丢弃消息、使用日志记录包装消息处理程序等。

如果我回到 Java 反射,我知道有几种方法可以做到这一点,但觉得在 Clojure 中实现它会帮助我理解。

(注意,这里我使用的是一般意义上的 SPI,并不是专门指它在JAR 文件规范中定义的方式)

谢谢

0 投票
1 回答
524 浏览

visual-studio-2010 - Visual Studio 2010 中服务提供商的最终列表?

VS2010 使通过 MEF 导出和导入编写扩展变得容易。但是,如果你想做任何有用的事情,你必须知道你需要哪些服务提供商来实现你的 super awesoem 扩展。

不幸的是,这些信息经常散布在各处,没有很好的文档记录或两者兼而有之。

我真的很想看到您可以导入到您的 VS 扩展中的所有服务提供商的完整列表,以及这些提供商......嗯,提供什么。有没有人见过这样的东西?

0 投票
2 回答
408 浏览

java - ServiceRegistry 构造函数在具体类上因 ClassCastException 而失败

尝试使用javax.imageio.spi.ServiceRegistry动态注册请求处理器HttpServlet

我得到的错误是:

该类GetStandardCodesProcessor实现IRequestProcessor. 该调用ServiceRegistry.lookupProviders()正在从文件中获取类列表META-INF/services/org.confused.servlet.IRequestProcessor。似乎我错过了关于如何从ServiceRegistry.lookupProviders().

这个页面几乎展示了我正在做的事情,尽管将 lookupProviders() 的返回值分配给了一个无类型的迭代器,而后者又被传递给了ServiceRegistry构造函数。这种技术给我同样的错误。

最后,如果这很重要,我将在 Eclipse Gallileo(内部版本 20100218-1602)中运行它。

问候,德鲁

0 投票
1 回答
2625 浏览

java - 如何欺骗 Java 服务提供者 API (jaxp)

我有一个需要调用 JAXP 的小程序,特别是SAXParserFactory。现在,正如您从 Javadoc 中看到的那样,这在内部使用了服务提供者机制,如此所述:

具体来说,如果它在我调用的任何应用程序 JAR 中都找不到文件,META-INF/services/javax.xml.parsers.SAXParserFactory它将尝试从我的应用程序代码库中获取它。如果我的小程序部署如下:

然后它将尝试向http://www.example.com/myapp/META-INF/services/javax.xml.parsers.SAXParserFactory发出 HTTP 请求

我宁愿它不这样做,特别是因为我的小程序已签名,并且这个额外的 HTTP 调用会触发关于unsigned code的警告。

现在,显而易见的解决方案是像它说的那样将 META-INF/services 文件放在我的应用程序 JAR 中,但是我该怎么做却仍然让它使用用户的 JRE 默认实现的 JAXP?或者,有没有办法说服小程序运行时查看我的 JAR 文件而不是codebase该文件?

注意:我知道我也可以部署我自己的 JAXP-RI 副本,但这对于 applet 来说是相当重量级的。

0 投票
1 回答
1022 浏览

java - Maven 中服务提供者接口的单元测试

最近,我们的开发团队已从 Ant 构建文件转移到 Maven 以进行项目管理和构建周期。到目前为止,我对结果非常满意。由于我仍在掌握 Maven,因此我没有准备好应对不寻常的构建要求的答案。

现在我创建了一个新项目并决定立即开始进行适当的 Maven 设置。该项目实际上是一个 API,它使用 Java 服务提供者接口 (SPI) 来查找可插入的实现。实现可以以常规 META-INF/services/ factoryname方式注册自己。API 完成了大部分工作,但需要一个实现来获得任何真正有用的东西。

我现在的问题是:我该如何为此编写单元测试?想到了两种方法:

  1. 在测试包中创建一个简单的实现,构建它,然后将其用于单元测试。这似乎不适合 Maven 项目生命周期。

  2. 创建一个包含测试实现的单独项目。虽然这意味着我们的 SVN 存储库中的另一个条目,但它感觉像是更清洁的方法。该项目可以在主 API 项目的测试周期中构建并用作 jar。它可以在主项目中列为具有测试范围的依赖项工件。

在这两种情况下,都有一个基本问题……实现需要主 API 进行编译。毕竟,它必须有一个实现API抽象工厂的工厂类。但是为了正确构建主 API、测试阶段和所有内容,它需要测试实现。这实际上是一个循环依赖的问题。

在 Maven 中处理这个问题的好方法是什么?在 Ant 中,我只是在 API 和它的测试之间构建实现。如果有帮助的话,我会稍微滥用 SPI 来定位对象模型包,而不是单个实现。它不像 JAXP,更像是一种注册资源的方式。

0 投票
1 回答
10838 浏览

java - 如何更改java DNS服务提供者

我正在构建一个快速的网络爬虫,我需要多线程 DNS 解析,所以我选择了一个名为dnsjava的多线程 DNS 服务提供商。不幸的是,我不知道如何替换默认的 DNS 服务提供商。

我查看了 dnsjava 的README文件,但说明不是很完整。

替换标准 Java DNS 功能:

从 Java 1.4 开始,服务提供者可以在运行时加载。要加载 dnsjava 服务提供者,请按照上述说明构建它并设置系统属性:

sun.net.spi.nameservice.provider.1=dns,dnsjava

这指示 JVM 以最高优先级使用为 DNS 提供的 dnsjava 服务。

有几件事我不清楚:

  1. 我在哪里放置 dnsjava.jar?
  2. 应该在哪里设置系统属性(是程序化的还是某种类型的文件更改)?

我在 Windows 7 机器上运行,我不确定我需要做什么来查找/修改系统属性...帮助!?

更新:
明白了:System.setProperty("sun.net.spi.nameservice.provider.1","dns,dnsjava");

0 投票
7 回答
49925 浏览

testing - 具有面向公众可访问的 SSO 的 SAML 版本 2 的服务提供商?

我想知道是否有任何公开可用的 SAML 版本 2 SP(服务提供商)可用于测试 SSO(单点登录)

Salesforce 和 Google 应用程序都有 SSO 解决方案,但如何访问它们以及这些服务的成本是多少?

出于测试目的,我可以在另一个系统上使用OpenSSO设置服务提供商。

0 投票
2 回答
25322 浏览

java - 在 Eclipse 中创建 META-INF/services 文件夹

我正在尝试用 Java 创建一个可扩展的应用程序并选择使用 SPI。根据我正在关注的本教程,我应该META-INF/services在我的 jar 中创建一个特定的文件,但不知道如何。我知道如何使用 jar 创建 jar META-INF,但找不到如何services在此文件夹中创建文件夹和特定文件的方法。(我正在使用 Eclipse)

谢谢你的帮助。

0 投票
1 回答
558 浏览

android - 如何通知服务提供商在 android 中以编程方式阻止/取消阻止传入的 SMS?

我想通知服务提供商阻止和取消阻止传入的短信。是否可以以编程方式执行此操作?