Aegis does not support unqualified schema. However, it should have just made up one for you. Please post a JIRA.
On Sun, Apr 6, 2008 at 2:40 AM, Judes Tumuhairwe <[EMAIL PROTECTED]> wrote: > Hi, > I have an interesting case binding/marshalling complex types using the 2.1 > snapshot. A NullPointer is thrown [in NamespaceHelper.getPrefix() ] when I > used AegisDataBinding but it works perfectly fine when I use JAXB (see the > "comment me to use JAXB" line in the server & client). > > Question: Do I absolutely have to have a prefix for my namespace? How come > it works fine with primitives? [actually I was trying to get the service > working with some interfaces & abstract classes & was running into "no > write > method for property xxx" so when I took them out & dealt with POJOs, I ran > into this NPE.] > > About the environment: Eclipse Europa, Win XP, Java 1.6 > I have 2 beans, the interface and the implementation, the server & the > client (all in the same package). > First, here is the stacktrace: > > Apr 6, 2008 2:06:05 AM > org.apache.cxf.service.factory.ReflectionServiceFactoryBean > buildServiceFromClass > INFO: Creating Service > {http://education.toorosystems.com/}University<http://education.toorosystems.com/%7DUniversity>from > class com.toorosystems.education.University > Exception in thread "main" java.lang.NullPointerException > at > > org.apache.cxf.aegis.util.NamespaceHelper.getPrefix(NamespaceHelper.java:71) > at > > org.apache.cxf.aegis.util.NamespaceHelper.getUniquePrefix(NamespaceHelper.java:57) > at > > org.apache.cxf.aegis.type.basic.BeanType.getNameWithPrefix(BeanType.java:533) > at > org.apache.cxf.aegis.type.basic.BeanType.writeSchema(BeanType.java:483) > at > > org.apache.cxf.aegis.databinding.AegisDatabinding.createSchemas(AegisDatabinding.java:477) > at > > org.apache.cxf.aegis.databinding.AegisDatabinding.initialize(AegisDatabinding.java:322) > at > > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:343) > at > > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:392) > at > > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:180) > at > > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:79) > at > > org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:113) > at com.toorosystems.education.Server.main(Server.java:19) > > The model: > *a)* The beans: > 1. Course [id (long), name & description; their getters and setters, + 2 > constructors: (no-arg & all-arg)] > 2. Teacher [age (int), name, department; their getters/setters, + 2 > constructors (no-arg & all-arg i.e. Course(int age, String name, String > dept)] > > *b)* The interface: > package com.toorosystems.education; > > import javax.jws.WebService; > import javax.jws.soap.SOAPBinding; > import javax.jws.WebMethod; > import javax.jws.WebResult; > import javax.jws.WebParam; > > @WebService(name="University", targetNamespace=" > http://education.toorosystems.com/") > @SOAPBinding(use=SOAPBinding.Use.LITERAL, > style=SOAPBinding.Style.DOCUMENT, > parameterStyle=SOAPBinding.ParameterStyle.BARE) > public interface University { > > @WebResult(targetNamespace="http://education.toorosystems.com/", > name="return", partName="return") > @WebMethod(operationName="getTeacher", exclude=false) > public Teacher getTeacher(@WebParam(targetNamespace=" > http://education.toorosystems.com/", name="course", mode=WebParam.Mode.IN) > Course course); > } > > *c)* The implementation > package com.toorosystems.education; > > import javax.xml.ws.WebServiceClient; > > //@WebServiceClient(name="com.toorosystems.education.UniversityImpl", > targetNamespace="http://education.toorosystems.com/") > public class UniversityImpl implements University { > > public UniversityImpl() {} > public Teacher getTeacher(Course course) { > System.out.println("getTeacher called..."); > return new Teacher("Mr. Tom", 52, "Computer Science" + > course.getName()); > } > > } > > > *d)* The Server > package com.toorosystems.education; > > import org.apache.cxf.aegis.databinding.AegisDatabinding; > import org.apache.cxf.frontend.ServerFactoryBean; > > public class Server { > > public static void main(String[] args) { > // Create our service implementation > System.out.println("Starting server ..."); > ServerFactoryBean svrFactory = new ServerFactoryBean(); > svrFactory.setServiceClass(University.class); > svrFactory.setAddress("http://localhost:9090/TV"); > svrFactory.setServiceBean(new UniversityImpl()); > > // comment me to use JAXB > svrFactory.getServiceFactory().setDataBinding(new > AegisDatabinding()); > > svrFactory.create(); > System.out.println("Server started!"); > } > } > > *e)* The client > package com.toorosystems.education; > > import org.apache.cxf.aegis.databinding.AegisDatabinding; > import org.apache.cxf.frontend.ClientProxyFactoryBean; > > public class Client { > > public static void main(String[] args) { > // see > http://cwiki.apache.org/CXF20DOC/introduction-to-aegis-21.html > ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); > // comment me to use JAXB > factory.getServiceFactory().setDataBinding(new AegisDatabinding()); > > factory.setServiceClass(University.class); > factory.setAddress("http://localhost:9090/TV"); > University client = (University) factory.create(); > > Teacher tr = client.getTeacher(new Course(40, "Intro to CS", > "Introductory Comp Sci")); > System.out.println("Response is: " + tr.getName() + ", " + > tr.getAge() + ", " + tr.getDepartment()); > } > } > > > Any pointers will be appreciated, > > Judes T >