You can change the path from cxf to something else but you can not remove it.
Christian 2017-07-30 18:08 GMT+02:00 Erwin Hogeweg <[email protected]>: > Hi Christan, > > Thanks for your reply, > > simply use the address: > > props.put("org.apache.cxf.ws.address", "/MyService"); > > and no context. This way each of your services can have its own path and > all will share the http service port. > I had tried that, but that doesn’t quite work either. I get the wrong > port, and ‘cxf’ is added to the context: > > g! props > System properties: > ... > org.osgi.service.http.port = 8088 > > 2017-07-30 11:51:12,624 [INFO ] pool-3-thread-1 TopologyManagerExport:218 > TopologyManager: export successful for {my.service.interfaces.MyService}={ > org.apache.cxf.ws.address=/MyService, name=MyServiceImpl, type=internal, > service.exported.configs=org.apache.cxf.ws, > service.exported.interfaces=*, service.id=149, service.bundleid=118, > service.scope=singleton}, endpoints: [{endpoint.framework.uuid= > d0b196e5-3e75-0017-138b-f8dd2f9e5e15, endpoint.id=http://192.168. > 180.1:8181/cxf/MyService, > endpoint.package.version.my.service.interfaces=4.1.0, > endpoint.service.id=149, name=MyServiceImpl, > objectClass=[my.service.interfaces.MyService], > org.apache.cxf.ws.address=http://192.168.180.1:8181/cxf/MyService, > service.bundleid=118, service.imported=true, service.imported.configs=[ > org.apache.cxf.ws], service.intents=[SOAP.1_1, HTTP, SOAP], > service.scope=singleton, type=internal}] > > Oh, that’s interesting, the port in the endpoint.id and the address above > is incorrect. The wsdl IS available as http://localhost:8088/cxf/ > MyService?wsdl. > > So the only challenge appear to be to remove the ‘cxf’ from the path (the > consumers of the service have the path hardcoded in the remoteservice.xml > file). Any ideas about that? > > > Thanks, > > Erwin > > > Christian > > 2017-07-29 19:52 GMT+02:00 Erwin Hogeweg <[email protected]< > mailto:[email protected]>>: > > Hi, > > I have a couple of OSGi services which are available as remote OSGi > service with CXF-DOSGi. The services are registered with the following > props, and that all works fine: > > Dictionary<String, Object> props = new Hashtable<String, Object>(); > props.put("name", "MyServiceImpl"); > props.put("type", "internal"); > props.put("service.exported.interfaces", "*"); > props.put("service.exported.configs", "org.apache.cxf.ws"); > props.put("org.apache.cxf.ws.address", "http://" + serviceHost + ":" + > servicePort + "/MyService"); > props.put("org.apache.cxf.ws.httpservice.context", "/MyService"); > > However, I would like to use the port defined with > org.osgi.service.http.port property as the service port. That doesn’t work > though because CXF creates a new instance of JettyHttpDestination for > every used port. This is from JettyHttpDesitination.java where servers for > ea. port are created: > > protected void retrieveEngine() > throws GeneralSecurityException, > IOException { > if (serverEngineFactory == null) { > return; > } > engine = > serverEngineFactory.retrieveJettyHTTPServerEngine( > nurl.getPort()); > if (engine == null) { > engine = serverEngineFactory. > createJettyHTTPServerEngine(nurl.getHost(), > nurl.getPort(), nurl.getProtocol()); > } > > And port 8088 is already claimed by the HttpService registered by CXF: > > g! services (objectClass=*HttpService) > {org.osgi.service.http.HttpService, org.eclipse.equinox.http. > servlet.ExtendedHttpService}={service.description=Equinox Jetty-based > Http Service, service.vendor=Eclipse.org<http://Eclipse.org><http:// > Eclipse.org>, > http.port=8088, service.id=64, service.bundleid=31, service.scope=bundle} > "Registered by bundle:" org.eclipse.equinox.http. > servlet_1.1.400.v20130418-1354 > [31] > "Bundles using service" > org.apache.cxf.cxf-rt-transports-http_3.1.6 [82] > cxf-dosgi-ri-dsw-cxf_1.7.0 [138] > > The CXF-DOSGi documentation<http://cxf.apache.org/distributed-osgi- > reference.html> says about the org.apache.cxf.ws.httpservice.contex: > "When this property is specified, the OSGi HTTP Service is used to expose > the service, rather than a dedicated Jetty HTTP Server. This property > doesn't allow the specification of a port number, as this is provided by > the HTTP Service. The Distributed OSGi distributions come with Pax-Web, for > which configuration information can be found at > http://wiki.ops4j.org/display/paxweb/Configuration, however other OSGi > HTTP Service implementations are potentially configured differently.” > > When I try that, the service is bound to localhost:9000 instead of > 0.0.0.0:8088, which seems to happen in org.apache.cxf.dosgi.dsw. > handlers.PojoConfiguration.java: > > private String getPojoAddress(Map<String, Object> sd, Class<?> iClass) > { > String address = getClientAddress(sd); > if (address != null) { > return address; > } > > // If the property is not of type string this will cause an > ClassCastException which > // will be propagated to the ExportRegistration exception property. > Object port = sd.get(Constants.WS_PORT_PROPERTY); > if (port == null) { > port = "9000"; > } > > address = "http://localhost:" + port + "/" + > iClass.getName().replace('.', '/'); > LOG.info<http://LOG.info>("Using a default address: " + address); > return address; > } > > I am trying to understand what I am missing for a while now, and every now > and again on a quiet Fri. afternoon (…) I take another stab at it, but I am > not getting much further. > > FWIW… the CXF servlet IS registered under the port defined by > org.osgi.service.http.port. > > This is all based on > CXF: 3.1.6 and CXF-DOSGi: 1.7.0 > Java 8 > Eclipse Equinox 3.10.2 > > I checked the release notes for 1.8.0 but didn’t see anything related to > this issue. > > Any suggestions or pointers in the right directions would be greatly > appreciated. > > > Thanks, > > Erwin > Erwin Hogeweg > CTO > 3690 Airport Road > Boca Raton, FL 33431 > P. +1 (954) 556-6565 > M. +1 (561) 306-7395 > F. +1 (561) 948-2730 > [Seecago]<http://www.seecago.com> > > > > > -- > -- > Christian Schneider > http://www.liquid-reality.de > <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e > 46&URL=http%3a%2f%2fwww.liquid-reality.de> > > Open Source Architect > http://www.talend.com > <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e > 46&URL=http%3a%2f%2fwww.talend.com> > > Erwin Hogeweg > CTO > 3690 Airport Road > Boca Raton, FL 33431 > P. +1 (954) 556-6565 > M. +1 (561) 306-7395 > F. +1 (561) 948-2730 > [Seecago]<http://www.seecago.com> > -- -- Christian Schneider http://www.liquid-reality.de <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.liquid-reality.de> Open Source Architect http://www.talend.com <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.talend.com>
