Bonjour.
Je suis en train de me familiariser avec les webservices.
Pour commencer j'ai essayé simplement avec ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
package be.toto.webservice;
 
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
 
@Stateless
@WebService
public class Toto
{
	@WebMethod
	public String sayHello()
	{
		System.out.println("--Hello World Web Service--");
		return "Hello World Web Service";
	}
 
}
et dans le pom.xml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<dependencies>
    	<dependency>
      		<groupId>axis</groupId>
      		<artifactId>axis-jaxrpc</artifactId>
      		<version>1.4</version>
    	</dependency>
  	<dependency>
      		<groupId>axis</groupId>
      		<artifactId>axis</artifactId>
      		<version>1.4</version>
    	</dependency>
        <dependency>
                 <groupId>javax.mail</groupId>
                 <artifactId>mail</artifactId>
                 <version>1.4</version>
         </dependency>
  	<dependency>
   		<groupId>javax</groupId>
   		<artifactId>javaee-api</artifactId>
   		<version>6.0</version>
   		<scope>provided</scope>
  	</dependency>
</dependencies>
Après le package, je déploie je jar sur un serveur glassfish 3.0.1.
Dans la console, l'application est bien déployée, je vois le bean toto.
Dans show end point j'ai :
...
Tester /TotoService/Toto?Tester
WSDL /TotoService/Toto?wsdl
...
les deux liens fonctionnent. Avec le tester il m'affiche bien la fonction sayHello(). Quand je clique dessus :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Method returned
java.lang.String : "Hello World Web Service"
SOAP Request
 
    <?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
        <S:Header/>
        <S:Body>
            <ns2:sayHello xmlns:ns2="http://webservice.toto.be/"/>
        </S:Body>
    </S:Envelope>
 
SOAP Response
 
    <?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
        <S:Body>
            <ns2:sayHelloResponse xmlns:ns2="http://webservice.toto.be/">
                <return>Hello World Web Service</return>
            </ns2:sayHelloResponse>
        </S:Body>
    </S:Envelope>
et j'ai bien le sysout dans le log.

Ensuite j'essaie ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
 
 
public class App
{
	public static void main(String[] args) throws Exception
	{
		String endPoint = "http://127.0.0.1:8080/TotoService/Toto";
 
		Service service = new Service();
		Call call = (Call) service.createCall();
		call.setTargetEndpointAddress(new java.net.URL(endPoint));
		call.setOperationName("sayHello");
		System.out.println(call.invoke(new Object[0]));
 
	}
 
}
Mais ça ne marche pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
 faultSubcode: 
 faultString: java.lang.NullPointerException
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://jax-ws.dev.java.net/}exception:<message>java.lang.NullPointerException</message><ns2:stackTrace><ns2:frame class="com.sun.enterprise.security.jmac.provider.config.PipeHelper" file="PipeHelper.java" line="321" method="makeFaultResponse"/><ns2:frame class="com.sun.enterprise.security.jmac.provider.config.PipeHelper" file="PipeHelper.java" line="359" method="getFaultResponse"/><ns2:frame class="com.sun.enterprise.security.webservices.CommonServerSecurityPipe" file="CommonServerSecurityPipe.java" line="200" method="processRequest"/><ns2:frame class="com.sun.enterprise.security.webservices.CommonServerSecurityPipe" file="CommonServerSecurityPipe.java" line="127" method="process"/><ns2:frame class="com.sun.xml.ws.api.pipe.helper.PipeAdapter" file="PipeAdapter.java" line="115" method="processRequest"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="629" method="__doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="588" method="_doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="573" method="doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="470" method="runSync"/><ns2:frame class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java" line="295" method="process"/><ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit" file="HttpAdapter.java" line="519" method="handle"/><ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java" line="288" method="handle"/><ns2:frame class="com.sun.xml.ws.transport.http.servlet.ServletAdapter" file="ServletAdapter.java" line="143" method="handle"/><ns2:frame class="org.glassfish.webservices.Ejb3MessageDispatcher" file="Ejb3MessageDispatcher.java" line="116" method="handlePost"/><ns2:frame class="org.glassfish.webservices.Ejb3MessageDispatcher" file="Ejb3MessageDispatcher.java" line="87" method="invoke"/><ns2:frame class="org.glassfish.webservices.EjbWebServiceServlet" file="EjbWebServiceServlet.java" line="196" method="dispatchToEjbEndpoint"/><ns2:frame class="org.glassfish.webservices.EjbWebServiceServlet" file="EjbWebServiceServlet.java" line="127" method="service"/><ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="847" method="service"/><ns2:frame class="com.sun.grizzly.http.servlet.FilterChainImpl" file="FilterChainImpl.java" line="195" method="doFilter"/><ns2:frame class="com.sun.grizzly.http.servlet.FilterChainImpl" file="FilterChainImpl.java" line="139" method="invokeFilterChain"/><ns2:frame class="com.sun.grizzly.http.servlet.ServletAdapter" file="ServletAdapter.java" line="376" method="doService"/><ns2:frame class="com.sun.grizzly.http.servlet.ServletAdapter" file="ServletAdapter.java" line="329" method="service"/><ns2:frame class="com.sun.grizzly.tcp.http11.GrizzlyAdapter" file="GrizzlyAdapter.java" line="166" method="service"/><ns2:frame class="com.sun.enterprise.v3.server.HK2Dispatcher" file="HK2Dispatcher.java" line="100" method="dispath"/><ns2:frame class="com.sun.enterprise.v3.services.impl.ContainerMapper" file="ContainerMapper.java" line="245" method="service"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="791" method="invokeAdapter"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="693" method="doProcess"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="954" method="process"/><ns2:frame class="com.sun.grizzly.http.DefaultProtocolFilter" file="DefaultProtocolFilter.java" line="170" method="execute"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="135" method="executeProtocolFilter"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="102" method="execute"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="88" method="execute"/><ns2:frame class="com.sun.grizzly.http.HttpProtocolChain" file="HttpProtocolChain.java" line="76" method="execute"/><ns2:frame class="com.sun.grizzly.ProtocolChainContextTask" file="ProtocolChainContextTask.java" line="53" method="doCall"/><ns2:frame class="com.sun.grizzly.SelectionKeyContextTask" file="SelectionKeyContextTask.java" line="57" method="call"/><ns2:frame class="com.sun.grizzly.ContextTask" file="ContextTask.java" line="69" method="run"/><ns2:frame class="com.sun.grizzly.util.AbstractThreadPool$Worker" file="AbstractThreadPool.java" line="330" method="doWork"/><ns2:frame class="com.sun.grizzly.util.AbstractThreadPool$Worker" file="AbstractThreadPool.java" line="309" method="run"/><ns2:frame class="java.lang.Thread" file="Thread.java" line="662" method="run"/></ns2:stackTrace><ns2:cause class="java.lang.NullPointerException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false"><ns2:stackTrace><ns2:frame class="com.sun.xml.ws.tx.service.TxServerPipe" file="TxServerPipe.java" line="151" method="process"/><ns2:frame class="com.sun.xml.ws.api.pipe.helper.PipeAdapter" file="PipeAdapter.java" line="115" method="processRequest"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="629" method="__doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="588" method="_doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="573" method="doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="470" method="runSync"/><ns2:frame class="com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl" file="AbstractTubeImpl.java" line="112" method="process"/><ns2:frame class="com.sun.enterprise.security.webservices.CommonServerSecurityPipe" file="CommonServerSecurityPipe.java" line="195" method="processRequest"/><ns2:frame class="com.sun.enterprise.security.webservices.CommonServerSecurityPipe" file="CommonServerSecurityPipe.java" line="127" method="process"/><ns2:frame class="com.sun.xml.ws.api.pipe.helper.PipeAdapter" file="PipeAdapter.java" line="115" method="processRequest"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="629" method="__doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="588" method="_doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="573" method="doRun"/><ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="470" method="runSync"/><ns2:frame class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java" line="295" method="process"/><ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit" file="HttpAdapter.java" line="519" method="handle"/><ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java" line="288" method="handle"/><ns2:frame class="com.sun.xml.ws.transport.http.servlet.ServletAdapter" file="ServletAdapter.java" line="143" method="handle"/><ns2:frame class="org.glassfish.webservices.Ejb3MessageDispatcher" file="Ejb3MessageDispatcher.java" line="116" method="handlePost"/><ns2:frame class="org.glassfish.webservices.Ejb3MessageDispatcher" file="Ejb3MessageDispatcher.java" line="87" method="invoke"/><ns2:frame class="org.glassfish.webservices.EjbWebServiceServlet" file="EjbWebServiceServlet.java" line="196" method="dispatchToEjbEndpoint"/><ns2:frame class="org.glassfish.webservices.EjbWebServiceServlet" file="EjbWebServiceServlet.java" line="127" method="service"/><ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="847" method="service"/><ns2:frame class="com.sun.grizzly.http.servlet.FilterChainImpl" file="FilterChainImpl.java" line="195" method="doFilter"/><ns2:frame class="com.sun.grizzly.http.servlet.FilterChainImpl" file="FilterChainImpl.java" line="139" method="invokeFilterChain"/><ns2:frame class="com.sun.grizzly.http.servlet.ServletAdapter" file="ServletAdapter.java" line="376" method="doService"/><ns2:frame class="com.sun.grizzly.http.servlet.ServletAdapter" file="ServletAdapter.java" line="329" method="service"/><ns2:frame class="com.sun.grizzly.tcp.http11.GrizzlyAdapter" file="GrizzlyAdapter.java" line="166" method="service"/><ns2:frame class="com.sun.enterprise.v3.server.HK2Dispatcher" file="HK2Dispatcher.java" line="100" method="dispath"/><ns2:frame class="com.sun.enterprise.v3.services.impl.ContainerMapper" file="ContainerMapper.java" line="245" method="service"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="791" method="invokeAdapter"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="693" method="doProcess"/><ns2:frame class="com.sun.grizzly.http.ProcessorTask" file="ProcessorTask.java" line="954" method="process"/><ns2:frame class="com.sun.grizzly.http.DefaultProtocolFilter" file="DefaultProtocolFilter.java" line="170" method="execute"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="135" method="executeProtocolFilter"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="102" method="execute"/><ns2:frame class="com.sun.grizzly.DefaultProtocolChain" file="DefaultProtocolChain.java" line="88" method="execute"/><ns2:frame class="com.sun.grizzly.http.HttpProtocolChain" file="HttpProtocolChain.java" line="76" method="execute"/><ns2:frame class="com.sun.grizzly.ProtocolChainContextTask" file="ProtocolChainContextTask.java" line="53" method="doCall"/><ns2:frame class="com.sun.grizzly.SelectionKeyContextTask" file="SelectionKeyContextTask.java" line="57" method="call"/><ns2:frame class="com.sun.grizzly.ContextTask" file="ContextTask.java" line="69" method="run"/><ns2:frame class="com.sun.grizzly.util.AbstractThreadPool$Worker" file="AbstractThreadPool.java" line="330" method="doWork"/><ns2:frame class="com.sun.grizzly.util.AbstractThreadPool$Worker" file="AbstractThreadPool.java" line="309" method="run"/><ns2:frame class="java.lang.Thread" file="Thread.java" line="662" method="run"/></ns2:stackTrace></ns2:cause>
 
java.lang.NullPointerException
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at App.main(App.java:15)
et le sysout n'apparaît pas dans le log. Donc le service ne s'exécute pas.
Mais pourquoi ?
Y'a un problème avec le end point ?
Des idées ?

Merci.