I have developed webservice using Xfire . now I'm migrating my services
to CXF. I'm facing
some issues please any one can help me to resolvc these issues.
I have written Authentication code and tested it with other cxf service
is working fine.
when i tried to migrate service from Xfire to CXF then I'm facing some
configuration issues. the service is generating the wsdl given below
but having tow different namespace in it.
wsdl:definitions targetNamespace="http://com.etilize.spexlive/account">
<wsdl:definitions name="AccountConsoleService"
targetNamespace="*http://account.service.spexlive.etilize.com*/">
<wsdl:import location=*MailScanner has detected a possible fraud attempt
from "localhost:8080" claiming to be*
"http://localhost:8080/spexLiveWebService/soap/AccountConsoleService?wsdl=AccountManagementIntf.wsdl"
namespace="*http://com.etilize.spexlive/account*">
*The tomcat console has the following errors.*
SEVERE: Schema element
{http://com.etilize.spexlive/account}updateCompanyApplicationNameResponse
references undefined type
{http://com.etilize.spexlive/account}updateCompanyApplicationNameResponse
for service
{http://account.service.spexlive.etilize.com/}AccountConsoleService.
May 12, 2008 5:06:31 PM
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
fillInSchemaCrossreferences
Please find the attached service.xml cxf.xml and web.xml and generated
wsdl file.
Can u help me to resolve this issue.
also help me to write a java client to use the service I'm using Jaxb2
data binding.
Regards,
Kashif Ahmed Qazi
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="dataBinding" class="org.apache.cxf.jaxb.JAXBDataBinding"/>
<bean id="serviceFactory" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="dataBinding" ref="dataBinding" />
<property name="serviceConfigurations">
<list>
<bean class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" />
<bean class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration" />
<bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration" />
</list>
</property>
</bean>
<jaxws:endpoint id="AMService"
implementor="com.etilize.spexlive.service.account.AccountManagementImpl"
address="/AccountConsoleService">
<jaxws:schemaLocations>
<jaxws:schemaLocation>
classpath:META-INF/schema/account.xsd
</jaxws:schemaLocation>
</jaxws:schemaLocations>
<!--
<jaxws:dataBinding>
<bean class="org.apache.cxf.jaxb.JAXBDataBinding">
<property name="contextProperties">
<map>
<entry>
<key><value>com.sun.xml.bind.defaultNamespaceRemap</value></key>
<value>uri:ultima:thule</value>
</entry>
</map>
</property>
</bean>
</jaxws:dataBinding>
-->
<jaxws:serviceFactory>
<ref bean="serviceFactory" />
</jaxws:serviceFactory>
<!--
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="passwordType" value="PasswordDigest" />
<entry key="passwordCallbackClass" value="com.etilize.spexlive.service.security.ServerPasswordCallback" />
</map>
</constructor-arg>
</bean>
</jaxws:inInterceptors>
-->
</jaxws:endpoint>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SpexLiveConsoleService</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:com/etilize/spexlive/service/cxf.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/soap/*</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<!--
<xfire>
<inHandlers>
<handler
handlerClass="com.etilize.spexlive.service.handler.AuthenticationHandler">
</handler>
</inHandlers>
</xfire> -->
<bean id="AccountManagementService" class="com.etilize.spexlive.service.account.AccountManagementImpl" />
<bean id="CatalogManagementService" class="com.etilize.spexlive.service.catalog.CatalogManagementImpl" />
<service>
<serviceBean>#AccountManagementService</serviceBean>
<serviceFactory>#jaxbServiceFactory</serviceFactory>
<schemas>
<schema>META-INF/schema/account.xsd</schema>
</schemas>
<style>document</style>
</service>
<service>
<serviceBean>#CatalogManagementService</serviceBean>
<serviceFactory>#jaxbServiceFactory</serviceFactory>
<schemas>
<schema>META-INF/schema/catalog.xsd</schema>
</schemas>
<style>document</style>
</service>
<bean name="jaxbServiceFactory"
class="org.codehaus.xfire.jaxb2.JaxbServiceFactory">
<constructor-arg ref="xfire.transportManager" />
</bean>
</beans>
package com.etilize.spexlive.service.client;
import java.util.HashMap;
import java.util.Map;
import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;
import com.etilize.spexlive.service.account.AccountManagement;
import com.etilize.spexlive.service.account.data.ActivateAdministrator;
import com.etilize.spexlive.service.account.data.GetUserList;
import com.etilize.spexlive.service.account.data.UserList;
public final class Client {
private Client() {
}
public static void main(String args[]) throws Exception {
/*
* //JaxbServiceFactory serviceFactory=new JaxbServiceFactory()
Service serviceModel = new ObjectServiceFactory(new
AegisBindingProvider(new
JaxbTypeRegistry())).create(AccountManagement.class,null,version_ns,props);
*/
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setDataBinding(new JAXBDataBinding());
factory.setServiceClass(AccountManagement.class);
System.out.println("*************************************************");
factory.setAddress("http://localhost:8080/spexLiveWebService/soap/AccountConsoleService");
AccountManagement service = (AccountManagement) factory.create();
System.out.println("Starting Client...");
GetUserList requestList = new GetUserList();
requestList.setUserId(111);
requestList.setCompanyId(343);
ActivateAdministrator ad= new ActivateAdministrator();
ad.setAdministratorId(1);
ad.setUserId(1);
System.out.println("Activate:"+service.activateAdministrator(ad));
UserList list=service.getUserList(requestList);
System.out.println("User List"+list.getCount());
System.out.println("Exiting Client.");
//System.exit(0);
}
}