felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dhiego Abrantes de Oliveira Martins <dhi...@dhiegoabrantes.com>
Subject Re: Question about accessing component dosgi
Date Wed, 27 Feb 2013 22:25:53 GMT
Christian,

I follow these steps:

1- Implements AdderService (using @WebService) (interface)
2- Implements AdderServiceImpl (using @WebService)  (Provider)
3- deploy item 1 and 2 in a container OSGi 1.

4- Create a *importer bundle* that contains a configuration file to show to
CXF-DOSGi where locale the AdderService using an endpoint.
5- Deploy item 4 to use the WEBSERVICE exported by item3 as a "local"
bundle.

So, when I try to deploy, I get this warning:

Fev 27, 2013 1:09:58 AM
org.apache.cxf.dosgi.dsw.hooks.AbstractClientHook$DiscoveryCallback
serviceChanged
INFO: Notified - AVAILABLE:
[org.apache.felix.ipojo.remote.adder.AdderService] endpoint id:
5e8f5f57-03d6-44bd-bcaf-f0eeadb5c433
Fev 27, 2013 1:09:58 AM org.apache.cxf.dosgi.dsw.hooks.AbstractClientHook
proxifyMatchingInterface
WARNING: No class can be found for
org.apache.felix.ipojo.remote.adder.AdderService

The question is: Its possible use DOSGi with WebServices (REST/SOAP)?
I mean: We can implement a bundle as a webservice and export it by dosgi ?


Abs,
__
*Dhiego** **Abrantes** de Oliveira Martins*
*Computer Science, M.Sc. Candidate at UFPE*
www.dhiegoabrantes.com
+55 83 9999.1081
***Any fool can write code that a computer can understand. Good programmers
write code that humans can understand*. (Martin Fowler)


2013/2/27 Christian Schneider <chris@die-schneider.net>

> You have two options here:
>
> 1) Introduce the @Webservice annotation  on the interface. CXF-DOSGi will
> then automatically use JAXWS/JAXB to export the service. Importing the
> service using DOSGi should also work.
> If it does not work then this is a bug. Can you give more informations
> abbout the problem and eventually open an issue at the CXF-DOSGi jira?
> 2) Do not change the interface. In this case DOSGi will use the Simple
> frontend with the Aegis binding. So you have to change your CXF code to
> access the service outside of OSGi use the same frontend and databinding.
>
> Christian
>
> Am 27.02.2013 04:55, schrieb Dhiego Abrantes de Oliveira Martins:
>
>> Hi,
>>
>> I'm exporting a dosgi component as a webservice and I like do access him.
>> I'm using iPOJO.
>>
>> *Interface:*
>>
>> public interface AdderService{
>>            String add();
>> }
>>
>> *Provider:*
>>
>> public class AdderServiceImpl implements AdderService{
>>            public String add(){
>>                      return "dhiego";
>>            }
>> }
>>
>> *Provider metadata.xml*
>>
>> <ipojo xmlns:xsi="http://www.w3.org/**2001/XMLSchema-instance<http://www.w3.org/2001/XMLSchema-instance>
>> "
>> xsi:schemaLocation="org.**apache.felix.ipojo
>> http://felix.apache.org/ipojo/**schemas/CURRENT/core.xsd<http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd>
>> "
>> xmlns="org.apache.felix.ipojo"**>
>>       <instance
>> component="org.apache.felix.**ipojo.remote.adder.impl.**
>> AdderServiceImpl">
>>            <property name="service.exported.**interfaces" value="*" />
>>            <property name="osgi.remote.**configuration.type"
>> value="pojo"/>
>>            <property name="service.exported.**configs" value="
>> org.apache.cxf.ws"
>> />
>>            <property name="org.apache.cxf.ws.**address" value="
>> http://localhost:9090/adder" />
>>       </instance>
>> </ipojo>
>>
>> So, I dont want to use dependence injection. Given some architectural
>> restrictions, I have to call the services as follow:
>>
>>      JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>>      factory.getInInterceptors().**add(new LoggingInInterceptor());
>>      factory.getOutInterceptors().**add(new LoggingOutInterceptor());
>>      factory.setServiceClass(**AdderService.class);
>>      factory.setAddress("http://**localhost:9090/adder<http://localhost:9090/adder>
>> ");
>>      AdderService client = (AdderService) factory.create();
>>     * String a = client.add();*
>>      System.out.println(a);
>>
>> When the *bold* line is executed, I get this error:
>>
>>
>>   Exception in thread "main" javax.xml.ws.**WebServiceException: Could
>> not
>> find wsdl:binding operation info for web method add.
>> at org.apache.cxf.jaxws.**JaxWsClientProxy.invoke(**
>> JaxWsClientProxy.java:112)
>> at $Proxy30.add(Unknown Source)
>> at Main.main(Main.java:22)
>>
>> The cause basically is the AdderService wasn't annotated with @WebService.
>> If we use the @WebService in interface AdderService, the problem will be
>> solved. However, the service won't be recongnized when we try to import it
>> in another container to use it as a distributed osgi component.
>>
>> Anyone can help me?
>>
>>
>> Best regards!
>> __
>> *Dhiego** **Abrantes*
>>
>>
>
> --
>  Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> Talend Application Integration Division http://www.talend.com
>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: users-unsubscribe@felix.**apache.org<users-unsubscribe@felix.apache.org>
> For additional commands, e-mail: users-help@felix.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message