You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Joel Schuster <jo...@Navsys.com> on 2009/12/14 18:32:21 UTC
DOSGi w/ Custom Type
I have a problem with a 'slightly' more complex type than based Java types in my exposed web service that doesn't seem to work.
Here's the setup:
I have a simple server that has as a return type a 'custom' type that wraps a string for this example.
The server bundles deploy fine, and the web service works great from the Eclipse Web Services Explorer.
When I try to bring up the Client in different instance of felix things start falling apart. If I don't use a custom type... use String for instance everything works fine.
However, when I use my custom type I get this error on the actual call to the server, not at Binding/Wiring time.
Dec 14, 2009 10:01:34 AM org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Couldn't instantiate class. example.wstype.WsType. Nested exception is java.lang.InstantiationException: example.wstype.WsType
at org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:63)...
So, I figured I'd cheat and placed the package that contains the type into the felix org.osgi.framework.system.packages.extra property. I get the same error.
The following is the source if anyone else wants to give it a try. Yes, I'm using iPOJO.
Oh yeah, here's the an important line from the example.wsserver bundle: Export-Package: example.wsserver.*, example.wstype.*
I can't imagine that I'm the first person to deal with this, so my assumption is that I'm doing something wrong. Based on my reading, I may have to add some mapping info to the AegisContext... but I can't figure out how to do that in an OSGi/Felix way.
Any help would be greatly appreciated. I would maybe suggest expanding the iPOJO w/ DOSGi example here (http://felix.apache.org/site/apache-felix-ipojo-dosgi.html) to include a complex type as an in/out parameter.
Interface bundle: example.wsserver
package example.wsserver;
import example.wstype.WsType;
public interface Server {
WsType getSomething( String string);
}
package example.wstype;
import java.io.Serializable;
public class WsType implements Serializable {
private static final long serialVersionUID = 1L;
private String astring;
public String getAstring() {
return astring;
}
public void setAstring(String astring) {
this.astring = astring;
}
public WsType( String astring) {
this.astring = astring;
}
}
Server Implementation bundle: example.wsserverimpl
package example.wsserverimpl;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Provides;
import example.wsserver.Server;
import example.wstype.WsType;
@Component( propagation=true)
@Provides
public class ServerImpl implements Server {
@Override
public WsType getSomething(String string) {
return new WsType( "echo: " + string);
}
}
Client Implementation bundle: example.wsclient
package example.wsclient;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Validate;
import org.osgi.service.log.LogService;
import example.wsserver.Server;
import example.wstype.WsType;
@Component
public class Client {
private volatile boolean running = false;
@Requires
private Server server;
@Requires
private LogService log;
@Validate
public void start() {
log.log( LogService.LOG_INFO, "Client start()");
new Thread( new Runnable() {
@Override
public void run() {
log.log( LogService.LOG_INFO, "Client run()");
running = true;
while( running) {
log.log( LogService.LOG_INFO, "Client running()");
WsType wsType = server.getSomething( "Hello");
log.log( LogService.LOG_INFO, wsType.getAstring());
try {
Thread.sleep( 5000);
} catch (InterruptedException e) {
log.log( LogService.LOG_ERROR, "Bad Sleep", e);
}
}
log.log( LogService.LOG_INFO, "Client exit()");
}
}).start();
}
@Invalidate
public void stop() {
running = false;
}
}
RE: DOSGi w/ Custom Type
Posted by Joel Schuster <jo...@Navsys.com>.
Works like a charm! Thanks!
-----Original Message-----
From: Justin Edelson [mailto:justinedelson@gmail.com]
Sent: Monday, December 14, 2009 11:57 AM
To: users@felix.apache.org
Subject: Re: DOSGi w/ Custom Type
Joel-
This is a completely random and less-than-educated guess, but have you tried
adding a zero-arg constructor to WsType? IIRC, Aegis (like most databinding
frameworks) requires a default constructor.
Justin
On Mon, Dec 14, 2009 at 12:32 PM, Joel Schuster <jo...@navsys.com> wrote:
> I have a problem with a 'slightly' more complex type than based Java types
> in my exposed web service that doesn't seem to work.
>
> Here's the setup:
>
> I have a simple server that has as a return type a 'custom' type that wraps
> a string for this example.
>
> The server bundles deploy fine, and the web service works great from the
> Eclipse Web Services Explorer.
>
> When I try to bring up the Client in different instance of felix things
> start falling apart. If I don't use a custom type... use String for instance
> everything works fine.
>
> However, when I use my custom type I get this error on the actual call to
> the server, not at Binding/Wiring time.
>
> Dec 14, 2009 10:01:34 AM org.apache.cxf.phase.PhaseInterceptorChain
> doIntercept
> INFO: Interceptor has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class.
> example.wstype.WsType. Nested exception is java.lang.InstantiationException:
> example.wstype.WsType
> at
> org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:63)...
>
> So, I figured I'd cheat and placed the package that contains the type into
> the felix org.osgi.framework.system.packages.extra property. I get the same
> error.
>
> The following is the source if anyone else wants to give it a try. Yes, I'm
> using iPOJO.
>
> Oh yeah, here's the an important line from the example.wsserver bundle:
> Export-Package: example.wsserver.*, example.wstype.*
>
> I can't imagine that I'm the first person to deal with this, so my
> assumption is that I'm doing something wrong. Based on my reading, I may
> have to add some mapping info to the AegisContext... but I can't figure out
> how to do that in an OSGi/Felix way.
>
> Any help would be greatly appreciated. I would maybe suggest expanding the
> iPOJO w/ DOSGi example here (
> http://felix.apache.org/site/apache-felix-ipojo-dosgi.html) to include a
> complex type as an in/out parameter.
>
> Interface bundle: example.wsserver
>
> package example.wsserver;
>
> import example.wstype.WsType;
>
> public interface Server {
>
> WsType getSomething( String string);
>
> }
>
> package example.wstype;
>
> import java.io.Serializable;
>
> public class WsType implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> private String astring;
>
> public String getAstring() {
> return astring;
> }
>
> public void setAstring(String astring) {
> this.astring = astring;
> }
>
> public WsType( String astring) {
> this.astring = astring;
> }
>
> }
>
> Server Implementation bundle: example.wsserverimpl
>
> package example.wsserverimpl;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Provides;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component( propagation=true)
> @Provides
> public class ServerImpl implements Server {
>
> @Override
> public WsType getSomething(String string) {
> return new WsType( "echo: " + string);
> }
>
> }
>
> Client Implementation bundle: example.wsclient
>
> package example.wsclient;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Invalidate;
> import org.apache.felix.ipojo.annotations.Requires;
> import org.apache.felix.ipojo.annotations.Validate;
> import org.osgi.service.log.LogService;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component
> public class Client {
>
> private volatile boolean running = false;
>
> @Requires
> private Server server;
>
> @Requires
> private LogService log;
>
> @Validate
> public void start() {
>
> log.log( LogService.LOG_INFO, "Client start()");
>
> new Thread( new Runnable() {
>
> @Override
> public void run() {
>
> log.log( LogService.LOG_INFO, "Client run()");
>
> running = true;
>
> while( running) {
>
> log.log( LogService.LOG_INFO, "Client
> running()");
>
> WsType wsType = server.getSomething( "Hello");
> log.log( LogService.LOG_INFO,
> wsType.getAstring());
> try {
> Thread.sleep( 5000);
> } catch (InterruptedException e) {
> log.log( LogService.LOG_ERROR, "Bad
> Sleep", e);
> }
> }
>
> log.log( LogService.LOG_INFO, "Client exit()");
>
> }
> }).start();
> }
>
> @Invalidate
> public void stop() {
> running = false;
> }
>
> }
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org
RE: DOSGi w/ Custom Type
Posted by Joel Schuster <jo...@Navsys.com>.
Works like a charm! Thanks!
-----Original Message-----
From: Justin Edelson [mailto:justinedelson@gmail.com]
Sent: Monday, December 14, 2009 11:57 AM
To: users@felix.apache.org
Subject: Re: DOSGi w/ Custom Type
Joel-
This is a completely random and less-than-educated guess, but have you tried
adding a zero-arg constructor to WsType? IIRC, Aegis (like most databinding
frameworks) requires a default constructor.
Justin
On Mon, Dec 14, 2009 at 12:32 PM, Joel Schuster <jo...@navsys.com> wrote:
> I have a problem with a 'slightly' more complex type than based Java types
> in my exposed web service that doesn't seem to work.
>
> Here's the setup:
>
> I have a simple server that has as a return type a 'custom' type that wraps
> a string for this example.
>
> The server bundles deploy fine, and the web service works great from the
> Eclipse Web Services Explorer.
>
> When I try to bring up the Client in different instance of felix things
> start falling apart. If I don't use a custom type... use String for instance
> everything works fine.
>
> However, when I use my custom type I get this error on the actual call to
> the server, not at Binding/Wiring time.
>
> Dec 14, 2009 10:01:34 AM org.apache.cxf.phase.PhaseInterceptorChain
> doIntercept
> INFO: Interceptor has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class.
> example.wstype.WsType. Nested exception is java.lang.InstantiationException:
> example.wstype.WsType
> at
> org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:63)...
>
> So, I figured I'd cheat and placed the package that contains the type into
> the felix org.osgi.framework.system.packages.extra property. I get the same
> error.
>
> The following is the source if anyone else wants to give it a try. Yes, I'm
> using iPOJO.
>
> Oh yeah, here's the an important line from the example.wsserver bundle:
> Export-Package: example.wsserver.*, example.wstype.*
>
> I can't imagine that I'm the first person to deal with this, so my
> assumption is that I'm doing something wrong. Based on my reading, I may
> have to add some mapping info to the AegisContext... but I can't figure out
> how to do that in an OSGi/Felix way.
>
> Any help would be greatly appreciated. I would maybe suggest expanding the
> iPOJO w/ DOSGi example here (
> http://felix.apache.org/site/apache-felix-ipojo-dosgi.html) to include a
> complex type as an in/out parameter.
>
> Interface bundle: example.wsserver
>
> package example.wsserver;
>
> import example.wstype.WsType;
>
> public interface Server {
>
> WsType getSomething( String string);
>
> }
>
> package example.wstype;
>
> import java.io.Serializable;
>
> public class WsType implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> private String astring;
>
> public String getAstring() {
> return astring;
> }
>
> public void setAstring(String astring) {
> this.astring = astring;
> }
>
> public WsType( String astring) {
> this.astring = astring;
> }
>
> }
>
> Server Implementation bundle: example.wsserverimpl
>
> package example.wsserverimpl;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Provides;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component( propagation=true)
> @Provides
> public class ServerImpl implements Server {
>
> @Override
> public WsType getSomething(String string) {
> return new WsType( "echo: " + string);
> }
>
> }
>
> Client Implementation bundle: example.wsclient
>
> package example.wsclient;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Invalidate;
> import org.apache.felix.ipojo.annotations.Requires;
> import org.apache.felix.ipojo.annotations.Validate;
> import org.osgi.service.log.LogService;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component
> public class Client {
>
> private volatile boolean running = false;
>
> @Requires
> private Server server;
>
> @Requires
> private LogService log;
>
> @Validate
> public void start() {
>
> log.log( LogService.LOG_INFO, "Client start()");
>
> new Thread( new Runnable() {
>
> @Override
> public void run() {
>
> log.log( LogService.LOG_INFO, "Client run()");
>
> running = true;
>
> while( running) {
>
> log.log( LogService.LOG_INFO, "Client
> running()");
>
> WsType wsType = server.getSomething( "Hello");
> log.log( LogService.LOG_INFO,
> wsType.getAstring());
> try {
> Thread.sleep( 5000);
> } catch (InterruptedException e) {
> log.log( LogService.LOG_ERROR, "Bad
> Sleep", e);
> }
> }
>
> log.log( LogService.LOG_INFO, "Client exit()");
>
> }
> }).start();
> }
>
> @Invalidate
> public void stop() {
> running = false;
> }
>
> }
>
>
>
Re: DOSGi w/ Custom Type
Posted by Justin Edelson <ju...@gmail.com>.
Joel-
This is a completely random and less-than-educated guess, but have you tried
adding a zero-arg constructor to WsType? IIRC, Aegis (like most databinding
frameworks) requires a default constructor.
Justin
On Mon, Dec 14, 2009 at 12:32 PM, Joel Schuster <jo...@navsys.com> wrote:
> I have a problem with a 'slightly' more complex type than based Java types
> in my exposed web service that doesn't seem to work.
>
> Here's the setup:
>
> I have a simple server that has as a return type a 'custom' type that wraps
> a string for this example.
>
> The server bundles deploy fine, and the web service works great from the
> Eclipse Web Services Explorer.
>
> When I try to bring up the Client in different instance of felix things
> start falling apart. If I don't use a custom type... use String for instance
> everything works fine.
>
> However, when I use my custom type I get this error on the actual call to
> the server, not at Binding/Wiring time.
>
> Dec 14, 2009 10:01:34 AM org.apache.cxf.phase.PhaseInterceptorChain
> doIntercept
> INFO: Interceptor has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class.
> example.wstype.WsType. Nested exception is java.lang.InstantiationException:
> example.wstype.WsType
> at
> org.apache.cxf.aegis.databinding.XMLStreamDataReader.read(XMLStreamDataReader.java:63)...
>
> So, I figured I'd cheat and placed the package that contains the type into
> the felix org.osgi.framework.system.packages.extra property. I get the same
> error.
>
> The following is the source if anyone else wants to give it a try. Yes, I'm
> using iPOJO.
>
> Oh yeah, here's the an important line from the example.wsserver bundle:
> Export-Package: example.wsserver.*, example.wstype.*
>
> I can't imagine that I'm the first person to deal with this, so my
> assumption is that I'm doing something wrong. Based on my reading, I may
> have to add some mapping info to the AegisContext... but I can't figure out
> how to do that in an OSGi/Felix way.
>
> Any help would be greatly appreciated. I would maybe suggest expanding the
> iPOJO w/ DOSGi example here (
> http://felix.apache.org/site/apache-felix-ipojo-dosgi.html) to include a
> complex type as an in/out parameter.
>
> Interface bundle: example.wsserver
>
> package example.wsserver;
>
> import example.wstype.WsType;
>
> public interface Server {
>
> WsType getSomething( String string);
>
> }
>
> package example.wstype;
>
> import java.io.Serializable;
>
> public class WsType implements Serializable {
>
> private static final long serialVersionUID = 1L;
>
> private String astring;
>
> public String getAstring() {
> return astring;
> }
>
> public void setAstring(String astring) {
> this.astring = astring;
> }
>
> public WsType( String astring) {
> this.astring = astring;
> }
>
> }
>
> Server Implementation bundle: example.wsserverimpl
>
> package example.wsserverimpl;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Provides;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component( propagation=true)
> @Provides
> public class ServerImpl implements Server {
>
> @Override
> public WsType getSomething(String string) {
> return new WsType( "echo: " + string);
> }
>
> }
>
> Client Implementation bundle: example.wsclient
>
> package example.wsclient;
>
> import org.apache.felix.ipojo.annotations.Component;
> import org.apache.felix.ipojo.annotations.Invalidate;
> import org.apache.felix.ipojo.annotations.Requires;
> import org.apache.felix.ipojo.annotations.Validate;
> import org.osgi.service.log.LogService;
>
> import example.wsserver.Server;
> import example.wstype.WsType;
>
> @Component
> public class Client {
>
> private volatile boolean running = false;
>
> @Requires
> private Server server;
>
> @Requires
> private LogService log;
>
> @Validate
> public void start() {
>
> log.log( LogService.LOG_INFO, "Client start()");
>
> new Thread( new Runnable() {
>
> @Override
> public void run() {
>
> log.log( LogService.LOG_INFO, "Client run()");
>
> running = true;
>
> while( running) {
>
> log.log( LogService.LOG_INFO, "Client
> running()");
>
> WsType wsType = server.getSomething( "Hello");
> log.log( LogService.LOG_INFO,
> wsType.getAstring());
> try {
> Thread.sleep( 5000);
> } catch (InterruptedException e) {
> log.log( LogService.LOG_ERROR, "Bad
> Sleep", e);
> }
> }
>
> log.log( LogService.LOG_INFO, "Client exit()");
>
> }
> }).start();
> }
>
> @Invalidate
> public void stop() {
> running = false;
> }
>
> }
>
>
>