Hi,
I tried to deploy a small phonebook example which uses an entity bean
phonebook.EntryBean for the entries and a stateless session bean
phonebook.PhonebookBean with remote interfaces to manage these entries. I am
using DTOs implementing java.io.Serializable with zero-arg constructors to
transfer the data between client and session bean. Now I tried to expose the
session bean also as a web service. Therefore, I created the following service
endpoint interface which signatures is similar to the method signatures in the
session bean:
package phonebook;
|
| import java.rmi.Remote;
| import java.rmi.RemoteException;
|
| public interface PhonebookSEI extends Remote {
|
| public EntryDTO findEntry(String firstname, String lastname) throws
RemoteException;
| public void createNewEntry(EntryDTO entry) throws RemoteException;
| public EntryDTO[] getEntries() throws RemoteException;
|
| }
Then, I wrote a config.xml for the wscompile tool loooking like this:
<?xml version="1.0" encoding="UTF-8"?>
| <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
| <service name="PhonebookService"
| targetNamespace="http://phonebook"
| typeNamespace="http://phonebook/types"
| packageName="phonebook">
| <interface name="phonebook.PhonebookSEI"
| servantName="phonebook.PhonebookBean" />
| </service>
| </configuration>
and used wscompile to create the following WSDL file
<?xml version="1.0" encoding="UTF-8"?>
|
| <definitions name="PhonebookService" targetNamespace="http://phonebook"
xmlns:tns="http://phonebook" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns2="http://phonebook/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
| <types>
| <schema targetNamespace="http://phonebook/types"
xmlns:tns="http://phonebook/types"
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://www.w3.org/2001/XMLSchema">
| <complexType name="createNewEntry">
| <sequence>
| <element name="EntryDTO_1" type="tns:EntryDTO"
nillable="true"/></sequence></complexType>
| <complexType name="EntryDTO">
| <sequence>
| <element name="dateOfBirth" type="dateTime" nillable="true"/>
| <element name="firstname" type="string" nillable="true"/>
| <element name="lastname" type="string" nillable="true"/>
| <element name="telephoneNumber" type="string"
nillable="true"/></sequence></complexType>
| <complexType name="createNewEntryResponse">
| <sequence/></complexType>
| <complexType name="findEntry">
| <sequence>
| <element name="String_1" type="string" nillable="true"/>
| <element name="String_2" type="string"
nillable="true"/></sequence></complexType>
| <complexType name="findEntryResponse">
| <sequence>
| <element name="result" type="tns:EntryDTO"
nillable="true"/></sequence></complexType>
| <complexType name="getEntries">
| <sequence/></complexType>
| <complexType name="getEntriesResponse">
| <sequence>
| <element name="result" type="tns:EntryDTO" nillable="true"
minOccurs="0" maxOccurs="unbounded"/></sequence></complexType>
| <element name="createNewEntry" type="tns:createNewEntry"/>
| <element name="createNewEntryResponse"
type="tns:createNewEntryResponse"/>
| <element name="findEntry" type="tns:findEntry"/>
| <element name="findEntryResponse" type="tns:findEntryResponse"/>
| <element name="getEntries" type="tns:getEntries"/>
| <element name="getEntriesResponse"
type="tns:getEntriesResponse"/></schema></types>
| <message name="PhonebookSEI_createNewEntry">
| <part name="parameters" element="ns2:createNewEntry"/></message>
| <message name="PhonebookSEI_createNewEntryResponse">
| <part name="result" element="ns2:createNewEntryResponse"/></message>
| <message name="PhonebookSEI_findEntry">
| <part name="parameters" element="ns2:findEntry"/></message>
| <message name="PhonebookSEI_findEntryResponse">
| <part name="result" element="ns2:findEntryResponse"/></message>
| <message name="PhonebookSEI_getEntries">
| <part name="parameters" element="ns2:getEntries"/></message>
| <message name="PhonebookSEI_getEntriesResponse">
| <part name="result" element="ns2:getEntriesResponse"/></message>
| <portType name="PhonebookSEI">
| <operation name="createNewEntry">
| <input message="tns:PhonebookSEI_createNewEntry"/>
| <output
message="tns:PhonebookSEI_createNewEntryResponse"/></operation>
| <operation name="findEntry">
| <input message="tns:PhonebookSEI_findEntry"/>
| <output message="tns:PhonebookSEI_findEntryResponse"/></operation>
| <operation name="getEntries">
| <input message="tns:PhonebookSEI_getEntries"/>
| <output
message="tns:PhonebookSEI_getEntriesResponse"/></operation></portType>
| <binding name="PhonebookSEIBinding" type="tns:PhonebookSEI">
| <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"/>
| <operation name="createNewEntry">
| <soap:operation soapAction=""/>
| <input>
| <soap:body use="literal"/></input>
| <output>
| <soap:body use="literal"/></output></operation>
| <operation name="findEntry">
| <soap:operation soapAction=""/>
| <input>
| <soap:body use="literal"/></input>
| <output>
| <soap:body use="literal"/></output></operation>
| <operation name="getEntries">
| <soap:operation soapAction=""/>
| <input>
| <soap:body use="literal"/></input>
| <output>
| <soap:body use="literal"/></output></operation></binding>
| <service name="PhonebookService">
| <port name="PhonebookSEIPort" binding="tns:PhonebookSEIBinding">
| <soap:address
location="REPLACE_WITH_ACTUAL_URL"/></port></service></definitions>
|
In ejb-jar.xml, I added the service endpoint like this:
<session>
| <ejb-name>Phonebook</ejb-name>
| <service-endpoint>phonebook.PhonebookSEI</service-endpoint>
| <home>phonebook.PhonebookHome</home>
| ...
| </session>
|
and write the webservices.xml like that:
<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
| xmlns:impl="http://phonebook/ws4ee"
| xmlns:xsi="http://www.w3.org/2001/XMLSchema.instance"
| xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd"
| version="1.1">
| <webservice-description>
|
<webservice-description-name>PhonebookService</webservice-description-name>
| <wsdl-file>META-INF/wsdl/PhonebookService.wsdl</wsdl-file>
|
<jaxrpc-mapping-file>META-INF/PhonebookService_mapping.xml</jaxrpc-mapping-file>
| <port-component>
| <port-component-name>PhonebookSEI</port-component-name>
| <wsdl-port>PhonebookSEIPort</wsdl-port>
|
<service-endpoint-interface>phonebook.PhonebookSEI</service-endpoint-interface>
| <service-impl-bean>
| <ejb-link>ejb/PhonebookBean</ejb-link>
| </service-impl-bean>
| </port-component>
| </webservice-description>
| </webservices>
When I now jar the beans and deploy them on JBoss 4.0.3 SP 1, I get the
following exception:
2006-03-17 14:08:24,444 ERROR [org.jboss.webservice.ServiceDeployer] Cannot
startup webservice for: gruppe00.jar
| java.lang.NullPointerException
| at
org.jboss.webservice.ServiceDeployerEJB.createWebXML(ServiceDeployerEJB.java:243)
| at
org.jboss.webservice.ServiceDeployerEJB.deployWebservices(ServiceDeployerEJB.java:131)
| at
org.jboss.webservice.ServiceDeployer.startWebservice(ServiceDeployer.java:191)
| at
org.jboss.webservice.ServiceDeployer.handleNotification(ServiceDeployer.java:121)
| at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at
org.jboss.mx.notification.NotificationListenerProxy.invoke(NotificationListenerProxy.java:153)
| at $Proxy32.handleNotification(Unknown Source)
| at
org.jboss.mx.util.JBossNotificationBroadcasterSupport.handleNotification(JBossNotificationBroadcasterSupport.java:127)
| at
org.jboss.mx.util.JBossNotificationBroadcasterSupport.sendNotification(JBossNotificationBroadcasterSupport.java:110)
| at
org.jboss.deployment.SubDeployerSupport.emitNotification(SubDeployerSupport.java:340)
| at
org.jboss.deployment.SubDeployerSupport.start(SubDeployerSupport.java:308)
| at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:661)
| at sun.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
| at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
| at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
| at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
| at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
| at
org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
| at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
| at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:260)
| at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
| at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:190)
| at $Proxy30.start(Unknown Source)
| at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1007)
| at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:808)
| at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:771)
| at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
| at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
| at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
| at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
| at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
| at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
| at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:260)
| at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
| at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:190)
| at $Proxy6.deploy(Unknown Source)
| at
org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:334)
| at
org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:504)
| at
org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:207)
| at
org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:218)
| at
org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:197)
|
I have double-checked everything to my best knowledge, however, I don't find
the error. Is this a bug, or have I missed something?
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3930964#3930964
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3930964
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user