问题标签 [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.
java - 简单的Java“服务提供者框架”?
我指的是 Effective Java 第 2 章中讨论的“服务提供者框架” ,这似乎正是处理我遇到的问题的正确方法,我需要在运行时实例化几个类中的一个,基于 aString
来选择哪个服务和一个Configuration
对象(本质上是一个 XML 片段):
但是我如何让各个服务提供者(例如一堆默认提供者+一些自定义提供者)注册自己?
例如,如果我编写自定义类 MyFooAlgorithm 和 MyFooAlgorithmProvider 来实现 FooAlgorithm,并将它们分发到一个 jar 中,有没有办法让 registerProvider 被自动调用,或者我使用该算法的客户端程序必须显式调用 FooAlgorithmRegistry.registerProvider( ) 对于他们想要使用的每个类?
clojure - 在 Clojure 中定义 SPI
我正在寻找一种惯用的方式来在 Clojure 中定义一个可以由外部“服务提供者”实现的接口。我的应用程序将在运行时定位并实例化服务提供者模块,并将某些职责委派给它。
例如,假设我正在实现 RPC 机制,并且我希望允许在配置时注入自定义中间件。该中间件可以预处理消息、丢弃消息、使用日志记录包装消息处理程序等。
如果我回到 Java 反射,我知道有几种方法可以做到这一点,但觉得在 Clojure 中实现它会帮助我理解。
(注意,这里我使用的是一般意义上的 SPI,并不是专门指它在JAR 文件规范中定义的方式)
谢谢
visual-studio-2010 - Visual Studio 2010 中服务提供商的最终列表?
VS2010 使通过 MEF 导出和导入编写扩展变得容易。但是,如果你想做任何有用的事情,你必须知道你需要哪些服务提供商来实现你的 super awesoem 扩展。
不幸的是,这些信息经常散布在各处,没有很好的文档记录或两者兼而有之。
我真的很想看到您可以导入到您的 VS 扩展中的所有服务提供商的完整列表,以及这些提供商......嗯,提供什么。有没有人见过这样的东西?
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)中运行它。
问候,德鲁
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 来说是相当重量级的。
java - Maven 中服务提供者接口的单元测试
最近,我们的开发团队已从 Ant 构建文件转移到 Maven 以进行项目管理和构建周期。到目前为止,我对结果非常满意。由于我仍在掌握 Maven,因此我没有准备好应对不寻常的构建要求的答案。
现在我创建了一个新项目并决定立即开始进行适当的 Maven 设置。该项目实际上是一个 API,它使用 Java 服务提供者接口 (SPI) 来查找可插入的实现。实现可以以常规 META-INF/services/ factoryname方式注册自己。API 完成了大部分工作,但需要一个实现来获得任何真正有用的东西。
我现在的问题是:我该如何为此编写单元测试?想到了两种方法:
在测试包中创建一个简单的实现,构建它,然后将其用于单元测试。这似乎不适合 Maven 项目生命周期。
创建一个包含测试实现的单独项目。虽然这意味着我们的 SVN 存储库中的另一个条目,但它感觉像是更清洁的方法。该项目可以在主 API 项目的测试周期中构建并用作 jar。它可以在主项目中列为具有测试范围的依赖项工件。
在这两种情况下,都有一个基本问题……实现需要主 API 进行编译。毕竟,它必须有一个实现API抽象工厂的工厂类。但是为了正确构建主 API、测试阶段和所有内容,它需要测试实现。这实际上是一个循环依赖的问题。
在 Maven 中处理这个问题的好方法是什么?在 Ant 中,我只是在 API 和它的测试之间构建实现。如果有帮助的话,我会稍微滥用 SPI 来定位对象模型包,而不是单个实现。它不像 JAXP,更像是一种注册资源的方式。
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 服务。
有几件事我不清楚:
- 我在哪里放置 dnsjava.jar?
- 应该在哪里设置系统属性(是程序化的还是某种类型的文件更改)?
我在 Windows 7 机器上运行,我不确定我需要做什么来查找/修改系统属性...帮助!?
更新:
明白了:System.setProperty("sun.net.spi.nameservice.provider.1","dns,dnsjava");
testing - 具有面向公众可访问的 SSO 的 SAML 版本 2 的服务提供商?
我想知道是否有任何公开可用的 SAML 版本 2 SP(服务提供商)可用于测试 SSO(单点登录)
Salesforce 和 Google 应用程序都有 SSO 解决方案,但如何访问它们以及这些服务的成本是多少?
出于测试目的,我可以在另一个系统上使用OpenSSO设置服务提供商。
java - 在 Eclipse 中创建 META-INF/services 文件夹
我正在尝试用 Java 创建一个可扩展的应用程序并选择使用 SPI。根据我正在关注的本教程,我应该META-INF/services
在我的 jar 中创建一个特定的文件,但不知道如何。我知道如何使用 jar 创建 jar META-INF
,但找不到如何services
在此文件夹中创建文件夹和特定文件的方法。(我正在使用 Eclipse)
谢谢你的帮助。
android - 如何通知服务提供商在 android 中以编程方式阻止/取消阻止传入的 SMS?
我想通知服务提供商阻止和取消阻止传入的短信。是否可以以编程方式执行此操作?