SessionBean as WebService - again complex data structures
carstenrudat Oct 12, 2007 2:33 PMHi all,
I have a SLSB and want it to be accessable through a webservice. So I write
package com.genloop.ejb.beans.service;
import javax.ejb.Remote;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@Remote
public interface PartnerWebService extends java.rmi.Remote{
@WebMethod
public String sayHello(String hello);
}
and
package com.genloop.ejb.beans.service;
import java.util.Date;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.jws.WebService;
import org.jboss.annotation.ejb.RemoteBinding;
import org.jboss.annotation.security.SecurityDomain;
import com.genloop.ejb.commons.SecurityInterceptor;
import com.genloop.ejb.commons.UserInterceptor;
@Stateless
@Remote(PartnerWebService.class)
@SecurityDomain("...")
@org.jboss.annotation.ejb.Clustered
@RemoteBinding(jndiBinding="test/PartnerWebService/remote")
@Interceptors({UserInterceptor.class, SecurityInterceptor.class})
@WebService(endpointInterface="com.genloop.ejb.beans.service.PartnerWebService", serviceName="PartnerService")
public class PartnerWebServiceBean implements PartnerWebService {
public String sayHello(String hello) {
return hello;
}
}
My Client works well:
public class PartnerWSClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
URL url = new URL(
"http://localhost:8080/test-ea-test-service/PartnerWebServiceBean?wsdl");
QName qname = new QName("http://service.beans.ejb.genloop.com/",
"PartnerService");
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(url, qname);
PartnerWebService partnerService = (PartnerWebService) service
.getPort(PartnerWebService.class);
System.out.println(partnerService.sayHello("test"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
}
But now, I add another mehtod:
public ComplexObject getComplexObject() {
return new ComplexObject(new Date(), "test");
}
...
@WebMethod
public ComplexObject getComplexObject();
...
public class ComplexObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
protected Date date;
protected String string;
public ComplexObject() {
}
getter/setter
}
No, I just get this exception:
Cannot obtain java/xml type mapping for: {http://service.beans.ejb.genloop.com/}complexObject