Java如何初始化JAXB / JAX-WS / etc实现?
我只是想了解一下
Java如何在JRE中包含标准参考实现(例如JRE6中的JAXB / JAX-WS),同时仍然允许第三方实现覆盖它(例如CXF).
我找到了找到javax.xml.ws.spi.FactoryFinder.find()方法的地方,该方法可以找到META-INF / services / java.xml.ws.spi.Provider或com中指定的类. sun.xml.internal.ws.spi.ProviderImpl(对于JAX-WS案例)并创建一个实例. 我找不到的是JRE调用FactoryFinder.find()方法的时间/位置/在哪个阶段. 任何人都可以开导我吗? [编辑]我找到了答案,但我不允许自己发布另外3个小时…… 解决方法
找出完整的逻辑.实际上JVM启动时没有任何反应.它全部基于延迟加载,例如真正的JAX-WS /任何提供程序仅在第一次需要时加载/实例化.
在加载JAX-WS实现的情况下: 假设我们想要使用以下代码调用Web服务: MyService service = new MyService_Service(); MyServiceSoap port = service.getMyServiceSoap(); port.mymethod(); 然后,以下事件初始化JAX-WS实现: >任何JAX-WS Web服务都扩展了javax.xml.ws.Service,因此MyService_Service扩展了Service 假设我们想要使用以下代码发布Web服务: @WebService(endpointInterface = "my.package.MyService") public class MyServiceImp implements MyService { ... } MyServiceImp service = new MyServiceImp(); InetSocketAddress addr = new InetSocketAddress(8080); Executor executor = Executors.newFixedThreadPool(16); HttpServer server = new HttpServer(addr); server.setExecutor(executor); HttpContext context = server.createContext("/MyService"); Endpoint endpoint = Endpoint.create(service); endpoint.publish(context); server.start(); 然后,以下事件初始化JAX-WS实现: > Endpoint.create()运行Provider.provider().createEndpoint() 以下链接帮助我理解了这一点: > http://kickjava.com/src/javax/xml/ws/Service.java.htm (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |