Das Problem ist wie folgt. Ich versuche einen Handler zu implementieren. Dieser soll die Nachricht rausschreiben aber auch anderes leisten.
In meiner Fantasie funktioniert der Handler wie folgt: Wenn eine Nachricht eintrifft, wird als erstes die Methode handleMessage aufgerufen, richtig? Das sollte mir die Moeglichkeit geben die Nachricht abzufangen und speichern.
Was habe ich falsch gemacht?
[CODE lang="java" title="Interfaceklasse" highlight="16"]package defaultPackage;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.jws.HandlerChain;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.soap.MTOM;
@HandlerChain(file = "handlers.xml", name = "Handler")
@WebService(targetNamespace = "http://www.beispiel.de/beispiel/beispiel", serviceName = "Beispiel", portName = "BeispielPort")
@MTOM(enabled = true)
@SOAPBinding
@Stateless
@XmlSeeAlso({ ObjectFactory.class })
public class CustomFaceBean implements CustomFace
{
/** Die CM_VERSION. */
public static final String CM_VERSION = "$Revision:$ $HeadURL:$";
@Inject
protected Worker worker;
/**
*
*/
@PostConstruct
protected void postConstruct()
{
System.setProperty("com.Sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.Sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.Sun.xml.ws.transport.http.HttpAdapter.dump", "true");
System.setProperty("com.Sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
}
@Override
@WebMethod(operationName = "execute")
@WebResult(name = "objectToBeReturned")
public ObjectToBeReturned methodToBeCalled(
@WebParam(name = "param1") Param1 param1,
@WebParam(name = "param2") Param2 param2,
@WebParam(name = "param3") Param3 param3)
{
return worker.execute(param1, param2, param3);
}
}[/CODE]
[CODE lang="xml" title="handlers.xml"]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-name>Handler</handler-name>
<handler-class>defaultPackage.Handler</handler-class>
</handler>
</handler-chain>
</handler-chains>
</jaxws:bindings>[/CODE]
[CODE lang="java" title="Handler.java"]package defaultPackage;
import java.util.Collections;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jws.HandlerChain;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import javax.xml.ws.soap.MTOM;
public class Handler implements SOAPHandler<SOAPMessageContext>
{
/** Die CM_VERSION. */
public static final String CM_VERSION = "$Revision:$ $HeadURL:$";
/**
*
*/
public Handler()
{
}
/**
*
*/
@PostConstruct
protected void postConstruct()
{
System.out.println("Handler postConstruct");
}
@Override
public Set<QName> getHeaders()
{
System.out.println("getHeaders");
return Collections.emptySet();
}
@Override
public boolean handleMessage(SOAPMessageContext context)
{
System.out.println("Right api");
try
{
SOAPMessage msg = context.getMessage();
System.out.println("Content " + msg.getSOAPBody().toString());
}
catch (SOAPException e)
{
e.printStackTrace();
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context)
{
System.out.println("handleFault");
return false;
}
@Override
public void close(MessageContext messageContext)
{
System.out.println("close Handler");
}
}[/CODE]
In meiner Fantasie funktioniert der Handler wie folgt: Wenn eine Nachricht eintrifft, wird als erstes die Methode handleMessage aufgerufen, richtig? Das sollte mir die Moeglichkeit geben die Nachricht abzufangen und speichern.
Was habe ich falsch gemacht?
[CODE lang="java" title="Interfaceklasse" highlight="16"]package defaultPackage;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.jws.HandlerChain;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.soap.MTOM;
@HandlerChain(file = "handlers.xml", name = "Handler")
@WebService(targetNamespace = "http://www.beispiel.de/beispiel/beispiel", serviceName = "Beispiel", portName = "BeispielPort")
@MTOM(enabled = true)
@SOAPBinding
@Stateless
@XmlSeeAlso({ ObjectFactory.class })
public class CustomFaceBean implements CustomFace
{
/** Die CM_VERSION. */
public static final String CM_VERSION = "$Revision:$ $HeadURL:$";
@Inject
protected Worker worker;
/**
*
*/
@PostConstruct
protected void postConstruct()
{
System.setProperty("com.Sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.Sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");
System.setProperty("com.Sun.xml.ws.transport.http.HttpAdapter.dump", "true");
System.setProperty("com.Sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
}
@Override
@WebMethod(operationName = "execute")
@WebResult(name = "objectToBeReturned")
public ObjectToBeReturned methodToBeCalled(
@WebParam(name = "param1") Param1 param1,
@WebParam(name = "param2") Param2 param2,
@WebParam(name = "param3") Param3 param3)
{
return worker.execute(param1, param2, param3);
}
}[/CODE]
[CODE lang="xml" title="handlers.xml"]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-name>Handler</handler-name>
<handler-class>defaultPackage.Handler</handler-class>
</handler>
</handler-chain>
</handler-chains>
</jaxws:bindings>[/CODE]
[CODE lang="java" title="Handler.java"]package defaultPackage;
import java.util.Collections;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.jws.HandlerChain;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import javax.xml.ws.soap.MTOM;
public class Handler implements SOAPHandler<SOAPMessageContext>
{
/** Die CM_VERSION. */
public static final String CM_VERSION = "$Revision:$ $HeadURL:$";
/**
*
*/
public Handler()
{
}
/**
*
*/
@PostConstruct
protected void postConstruct()
{
System.out.println("Handler postConstruct");
}
@Override
public Set<QName> getHeaders()
{
System.out.println("getHeaders");
return Collections.emptySet();
}
@Override
public boolean handleMessage(SOAPMessageContext context)
{
System.out.println("Right api");
try
{
SOAPMessage msg = context.getMessage();
System.out.println("Content " + msg.getSOAPBody().toString());
}
catch (SOAPException e)
{
e.printStackTrace();
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context)
{
System.out.println("handleFault");
return false;
}
@Override
public void close(MessageContext messageContext)
{
System.out.println("close Handler");
}
}[/CODE]
Zuletzt bearbeitet von einem Moderator: