Erzeugen einer Handlerklasse zum Abfangen von SOAP-Requests

Wiplash4

Aktives Mitglied
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]
 
Zuletzt bearbeitet von einem Moderator:

Barista

Top Contributor
Das Package stimmt nicht überein.

Ich würde Dir übrigens empfehlen, das Veröffentlichen von Dingen zu vermeiden, an denen man konkrete Firmen erkennen kann.
 

mihe7

Top Contributor
Ich würde mal sagen, Deine XML ist falsch. Lt. https://javaee.github.io/metro-jax-ws/doc/user-guide/ch03.html#section-404105458093083 müsste die im file-Attribut der @HandlerChain-Annotation angegebene XML-Datei so aussehen:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
    <jws:handler-chain>
        <jws:handler>
            <jws:handler-class>fromjava.handler_simple.common.TestHandler
            </jws:handler-class>
        </jws:handler>
    </jws:handler-chain>
</jws:handler-chains>
Kann sein, dass ich mich irre, weil ich da jetzt nicht weiter nachgesehen habe.
 

Wiplash4

Aktives Mitglied
Zur Sicherheit probiere ich das noch mal aus, aber ich bilde mir ein es war eines meiner Versuche. Die namespace war bei mir javaee. In meinem Beispiel ist der default namespace auf javaee gesetzt.
 

Wiplash4

Aktives Mitglied
Der Webservice funktioniert einwandfrei!!! Der Handler wurde im Nachhinein dran geklatscht, es scheint er wird nicht verwendet. Denn ich vermisse die obigen Debugausgaben und der Debugger springt nicht in die entsprechende Zeile!
 

mihe7

Top Contributor
OK, mal schnell getestet: funktioniert einwandfrei.

Code:
  simpletest3 was successfully deployed in 1.480 milliseconds.|#]
  Handled message|#]
  Hello|#]
  Handled message|#]

Ein Maven-Projekt, unter src/java/main/de/mihe7:

Java:
package de.mihe7;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
import javax.jws.HandlerChain;

@WebService(serviceName = "TestService")
@Stateless()
@HandlerChain(file = "TestService_handler.xml")
public class TestService {

    @WebMethod(operationName = "hello")
    public String hello(@WebParam(name = "name") String txt) {
        System.out.println("Hello");
        return "Hello " + txt + " !";
    }
}
und der Handler

Java:
package de.mihe7;

import java.util.Collections;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class MyMessageHandler implements SOAPHandler<SOAPMessageContext> {
    
    public boolean handleMessage(SOAPMessageContext messageContext) {
        System.out.println("Handled message");
        SOAPMessage msg = messageContext.getMessage();
        return true;
    }
    
    public Set<QName> getHeaders() {
        return Collections.EMPTY_SET;
    }
    
    public boolean handleFault(SOAPMessageContext messageContext) {
        return true;
    }
    
    public void close(MessageContext context) {
    }
    
}

Die Klassen wurden von NetBeans erzeugt. Die XML-Datei auch:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
    <handler>
      <handler-name>de.mihe7.MyMessageHandler</handler-name>
      <handler-class>de.mihe7.MyMessageHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

Allerdings hat NetBeans die Datei im falschen Verzeichnis abgelegt (unter src/main/java/...), musste ich nach src/main/resources/... verschieben, damit Maven die Datei auch ins WAR packt.
 

Wiplash4

Aktives Mitglied
Es hat funktioniert, allerdings musste ich die handlers.xml in das Unterverzeichniss src/main/resources/defautlPackage/ packen. Dann wurde es gefunden.

Danke trotzdem.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Erzeugen einer openapi spec via swagger XML & JSON 1
sylo Beim Erzeugen einer XML Datei auch die XML Struktur erzeugen? XML & JSON 11
J Object in JSON Datei einlesen und als neues Object erzeugen (in ein Object Array) XML & JSON 29
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
C XML erzeugen Tipps und Tricks XML & JSON 7
M JAXB versucht abstrakte Klasse zu erzeugen XML & JSON 7
J XML Parser anhand xsd erzeugen XML & JSON 2
A Fehler beim Erzeugen eines XML-Schema XML & JSON 4
H PDF erzeugen mit FOP(fo fehlerhaft) XML & JSON 2
S JDOM ohne XML Header erzeugen? XML & JSON 2
R XSD aus Java Klassen erzeugen?? XML & JSON 2
S Aus XML-File eine Baumstruktur erzeugen XML & JSON 5
P cxf: WSDL dynamisch erzeugen (zur Laufzeit) XML & JSON 7
F XML erzeugen aus JTree und wieder einlesen... XML & JSON 6
N Teilbaum aus DOM-Baum erzeugen XML & JSON 5
S Java - Klassen erzeugen aus xsd bzw. wsdl XML & JSON 3
J Objektstruktur aus XML-Datei erzeugen XML & JSON 21
T Einzug bei XSLTransformator erzeugen XML & JSON 3
P XSD Schema: Konstanten mit "fixed" erzeugen geht nicht ??? XML & JSON 3
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
B jdom document aus string erzeugen? XML & JSON 1
H PDFs erzeugen mit Apache FOP XML & JSON 3
D XML Datei mit DOM erzeugen XML & JSON 6
G JAXB Objekte erzeugen XML & JSON 3
E XOM setzen von XML-Schema declaration beim erzeugen XML-File XML & JSON 2
B DTD aus Java erzeugen XML & JSON 2
M PDF erzeugen aus Stringarray XML & JSON 1
G XML Dokument mit DOM erzeugen XML & JSON 9
S svg erzeugen XML & JSON 2
B org.w3c.dom.Node erzeugen XML & JSON 2
B XML-Document mit Java erzeugen und zuruecksenden XML & JSON 1
S Menüeinträge aus XML erzeugen XML & JSON 21
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1
D Innerhalb einer Property auf eine andere verlinken? XML & JSON 3
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
S Validierung einer XML-Datei - Führende Leerzeichen und Tabs XML & JSON 10
M Layout + Inhalt einer JTable speichern XML & JSON 30
J Welche Gründe führen zu einer endlos tiefen XML? XML & JSON 4
T Pfad in einer Variablen speichern XML & JSON 1
E Wie kann ich ein XSD-Schema in einer JSP-Seite verwenden? XML & JSON 7
T Visualisierung von XML Dateien in einer Java SwingGui XML & JSON 11
R XSD in einer choice mehrmals das selbe element möglich XML & JSON 5
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
K Beim Parsen einer XML-Datei Connection timed out XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
B XML aus einer URL im Internet lesen (JDOM) XML & JSON 4
D Aus lesen einer XML-Datei ( 1 root, 3 childs) XML & JSON 7
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
B 2 Attribute in einer xsl XML & JSON 2
T Inhalt einer .xml Datei auf Javaoberfläche wiedergeben XML & JSON 4
T Schreiben einer XML XML & JSON 8
B XML auf Basis einer DTD erstellen XML & JSON 2
hdi Probleme beim Erstellen einer XML XML & JSON 7
O Parsen einer XML mit JDOM ohne Doctype Declaration XML & JSON 2
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
sylo Mehrere XSDs und mehrere Namensräume in einer XML unterbringen? XML & JSON 2
Nicer Bestimmten Wert aus einer XML Auslesen XML & JSON 34
J xmlencoder Zustände einer Bean schreiben XML & JSON 3
N value Wert einer XML Datei mit JAVA bearbeiten XML & JSON 21
S Probleme beim erstellen einer Jar XML & JSON 12
J Problem mit compile einer XSD XML & JSON 3
S Einlesen einer xml Datei XML & JSON 4
F hilfe bei einer aufgabe XML & JSON 3
D Anzahl der Knoten in einer XML XML & JSON 6
R Parsen einer XML ohne Validierung XML & JSON 2
D XML Datei innerhalb einer JAR Datei parsen XML & JSON 2
M Xerces -Parsen mit einer externen Schemadatei geht nicht XML & JSON 2
cybermat Ergebnis einer XSLT-Tansformation als Rückgabewert erhalten XML & JSON 4
J Fehler beim laden einer .xml XML & JSON 3
ven000m Übungsaufgabe: Valide und gültige XML Datei zu einer DTD XML & JSON 7
A Auslesen einer XML Datei XML & JSON 58
P OutOfMemoryError beim Einlesen einer XML-Datei XML & JSON 7
P Knoten-Attribute einer xsd-Datei in einem JTree auslesen XML & JSON 18
T Einfach nur die Elemente einer XML Datei auslesen :( XML & JSON 10
Z Erzeugung einer Referenz von Knoten in JTree auf DOMTree XML & JSON 3
A Element an einer bestimmten Stelle einfügen (nicht am Ende) XML & JSON 4

Ähnliche Java Themen

Neue Themen


Oben