You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Greg Cawthorn <gr...@voxsurf.com> on 2005/01/28 16:39:54 UTC

WSDLException: Can't find prefix for...

I am having a problem with a web service under Axis 1.1 in Tomcat 5. The 
service is a stub for a data handler and declares CRUD methods for a 
profile object which I have built custom serializers for and declared in 
my deployment descriptor. The interface looks like this:

    public void addNotificationProfile(VxsNotificationProfile profile) 
throws VxsPersistenceException;
    public void deleteNotificationProfile(VxsUserId userId) throws 
VxsPersistenceException;
    public VxsNotificationProfile retrieveNotificationProfile(VxsUserId 
userId) throws VxsPersistenceException;
    public void updateNotificationProfile(VxsNotificationProfile 
profile) throws VxsPersistenceException;

It deploys successfully but when I try to view the WSDL I get the 
following exception:

Fault - ; nested exception is: 
	WSDLException: faultCode=OTHER_ERROR: Can't find prefix for 'http://notification.voxsurf.com'. Namespace prefixes must be set on the Definition object using the addNamespace(...) method.: 

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: WSDLException: faultCode=OTHER_ERROR: Can't find prefix for 'http://notification.voxsurf.com'. Namespace prefixes must be set on the Definition object using the addNamespace(...) method.: 
 faultActor: 
 faultNode: 
 faultDetail: 


However if I remove some of the class's methods from the allowedMethods 
parameter in the wsdd (which I've attached), then I can view the WSDL 
with no error. It appears that I can declare a single method that takes 
a VxsNotificationProfile object as a parameter, but if I declare two 
methods such as addNotificationProfile and updateNotificationProfile 
then the error occurs. It may be a problem with my custom serializer for 
that class but the fact that I can view the WSDL for certain methods 
that take in or return an instance of the object suggests otherwise.

Does anyone have any ideas as to what I'm doing wrong?

Thanks

Greg Cawthorn

Re: WSDLException: Can't find prefix for...

Posted by TMG <tm...@nc.rr.com>.
Greg,

Without being able to review all the parts, my first guess is that you 
have inconsistencies with your namespace.  It appears you are using an 
URN namespace  xmlns:ns="urn:notification:voxsurf.com" in the wsdd, and 
the wsdl has a URL namespace xmlns:"http://notification.voxsurf.com".

Tom Gordon

Greg Cawthorn wrote:

> I am having a problem with a web service under Axis 1.1 in Tomcat 5. 
> The service is a stub for a data handler and declares CRUD methods for 
> a profile object which I have built custom serializers for and 
> declared in my deployment descriptor. The interface looks like this:
>
>    public void addNotificationProfile(VxsNotificationProfile profile) 
> throws VxsPersistenceException;
>    public void deleteNotificationProfile(VxsUserId userId) throws 
> VxsPersistenceException;
>    public VxsNotificationProfile retrieveNotificationProfile(VxsUserId 
> userId) throws VxsPersistenceException;
>    public void updateNotificationProfile(VxsNotificationProfile 
> profile) throws VxsPersistenceException;
>
> It deploys successfully but when I try to view the WSDL I get the 
> following exception:
>
> Fault - ; nested exception is:     WSDLException: 
> faultCode=OTHER_ERROR: Can't find prefix for 
> 'http://notification.voxsurf.com'. Namespace prefixes must be set on 
> the Definition object using the addNamespace(...) method.:
> AxisFault
> faultCode: 
> {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> faultSubcode: faultString: WSDLException: faultCode=OTHER_ERROR: Can't 
> find prefix for 'http://notification.voxsurf.com'. Namespace prefixes 
> must be set on the Definition object using the addNamespace(...) 
> method.: faultActor: faultNode: faultDetail:
>
> However if I remove some of the class's methods from the 
> allowedMethods parameter in the wsdd (which I've attached), then I can 
> view the WSDL with no error. It appears that I can declare a single 
> method that takes a VxsNotificationProfile object as a parameter, but 
> if I declare two methods such as addNotificationProfile and 
> updateNotificationProfile then the error occurs. It may be a problem 
> with my custom serializer for that class but the fact that I can view 
> the WSDL for certain methods that take in or return an instance of the 
> object suggests otherwise.
>
> Does anyone have any ideas as to what I'm doing wrong?
>
> Thanks
>
> Greg Cawthorn
>
>------------------------------------------------------------------------
>
><deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
>  <service name="NotificationService" style="message">
>    <parameter name="className" value="com.voxsurf.notification.service.VxsNotificationWebService"/>
>    <parameter name="allowedMethods" value="submitEvent"/>
>  </service>
>  <service name="NotificationProfileService" style="java:RPC">
>    <parameter name="className" value="com.voxsurf.notification.service.VxsWebServiceNotificationProfileDataHandler"/>
>    <!--<parameter name="allowedMethods" value="addNotificationProfile deleteNotificationProfile retrieveNotificationProfile updateNotificationProfile"/>-->
>    <parameter name="allowedMethods" value="deleteNotificationProfile retrieveNotificationProfile"/>
>    
>    <typeMapping qname="ns:VxsUserId" xmlns:ns="urn:notification.voxsurf.com"
>    	languageSpecificType="java:com.voxsurf.core.entities.VxsUserId"
>    	deserializer="com.voxsurf.notification.service.axis.VxsUserIdDeserializerFactory"
>    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
>
>    <typeMapping qname="ns:VxsNotificationRuleId" xmlns:ns="urn:notification.voxsurf.com"
>    	languageSpecificType="java:com.voxsurf.notification.ruleengine.VxsNotificationRuleId"
>    	deserializer="com.voxsurf.notification.service.axis.VxsNotificationRuleIdDeserializerFactory"
>    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
>
>    <typeMapping qname="ns:VxsNotificationDeviceId" xmlns:ns="urn:notification.voxsurf.com"
>    	languageSpecificType="java:com.voxsurf.notification.VxsNotificationDeviceId"
>    	deserializer="com.voxsurf.notification.service.axis.VxsNotificationDeviceIdDeserializerFactory"
>    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
>
>    <typeMapping qname="ns:VxsNotificationRule" xmlns:ns="urn:notification.voxsurf.com"
>    	languageSpecificType="java:com.voxsurf.notification.ruleengine.VxsNotificationRule"
>    	serializer="com.voxsurf.notification.service.axis.VxsNotificationRuleSerializerFactory"
>    	deserializer="com.voxsurf.notification.service.axis.VxsNotificationRuleDeserializerFactory"
>    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
>
>    <typeMapping qname="ns:VxsNotificationDevice" xmlns:ns="urn:notification.voxsurf.com"
>    	languageSpecificType="java:com.voxsurf.notification.VxsNotificationDevice"
>    	serializer="com.voxsurf.notification.service.axis.VxsNotificationDeviceSerializerFactory"
>    	deserializer="com.voxsurf.notification.service.axis.VxsNotificationDeviceDeserializerFactory"
>    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
>  </service>
></deployment>
>  
>