You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Benson Margulies (JIRA)" <ji...@apache.org> on 2008/04/06 21:56:24 UTC

[jira] Resolved: (CXF-1504) AegisDataBinding throws NullPointer with un-prefixed Namespace

     [ https://issues.apache.org/jira/browse/CXF-1504?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benson Margulies resolved CXF-1504.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1

svn 645294. This appears to be a problem with doc/lit/bare versus Aegis.


> AegisDataBinding throws NullPointer with un-prefixed Namespace
> --------------------------------------------------------------
>
>                 Key: CXF-1504
>                 URL: https://issues.apache.org/jira/browse/CXF-1504
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.1
>         Environment: Windows XP, Eclipse Europa (3.3), Java 1.6
>            Reporter: Judes Tumuhairwe
>            Assignee: Benson Margulies
>             Fix For: 2.1
>
>
> When dealing with Complex types (i.e. non-primitives), AegisDatabinding throws a NullPointer exception [in NamespaceHelper.getPrefix() ] when I but it works perfectly fine when I use JAXB (see the "comment me to use JAXB" line in the server & client). It should default to a prefix e.g. ns0.
> 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 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)
> To reproduce:
> I had 2 beans, the interface and the implementation, the server & the client (all in the same package). 
> 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());
>     }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.