Ich erstelle einen Web-Service ohne Achse. Ich benutze SAAJ, JAXB und Servlet. Ich kann eine Klasse mit JAXB korrekt marshallen und abmarshallen. Aber wie kann ich zusammen SAAJ und JAXB für die SOAP-Kommunikation verwenden? Ich möchte den JAXB-konvertierten XML-Text in SOAP BODY-Tag mit SAAJ setzen. Wie kann ich das machen? Ich lese SAAJ-Dokumente, die auf der Oracle-Website sind, aber es ist nicht verständlich. Sie erzählen so komplex.Joining SAAJ und JAXB
9
A
Antwort
18
könnten Sie wie folgt vorgehen:
Demo
SOAPBody
implementiert org.w3c.dom.Node
so können Sie Ihre JAXB Umsetzung Marschall darauf haben:
import javax.xml.bind.*;
import javax.xml.soap.*;
public class Demo {
public static void main(String[] args) throws Exception {
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage message = mf.createMessage();
SOAPBody body = message.getSOAPBody();
Foo foo = new Foo();
foo.setBar("Hello World");
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(foo, body);
message.saveChanges();
message.writeTo(System.out);
}
}
Java Model (Foo)
Unten ein einfaches Java-Modell ist, dass wir für dieses Beispiel verwenden:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Foo {
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
Ausgabe
Im Folgenden wird die Ausgabe von Ausführen des Demo-Code (ich es in meiner Antwort formatiert habe es leichter lesbar zu machen) .
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<foo>
<bar>Hello World</bar>
</foo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
UPDATE
Unten ist ein Beispiel JAXB mit dem JAX-WS-APIs (genauere Informationen zu Service siehe: http://blog.bdoughan.com/2013/02/leveraging-moxy-in-your-web-service-via.html).
import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;
import blog.jaxws.provider.*;
public class Demo {
public static void main(String[] args) throws Exception {
QName serviceName = new QName("http://service.jaxws.blog/", "FindCustomerService");
Service service = Service.create(serviceName);
QName portQName = new QName("http://example.org", "SimplePort");
service.addPort(portQName, SOAPBinding.SOAP11HTTP_BINDING, "http://localhost:8080/Provider/FindCustomerService?wsdl");
JAXBContext jc = JAXBContext.newInstance(FindCustomerRequest.class, FindCustomerResponse.class);
Dispatch<Object> sourceDispatch = service.createDispatch(portQName, jc, Service.Mode.PAYLOAD);
FindCustomerRequest request = new FindCustomerRequest();
FindCustomerResponse response = (FindCustomerResponse) sourceDispatch.invoke(request);
System.out.println(response.getValue().getFirstName());
}
}
Verwandte Themen
- 1. SQL Joining und Update
- 2. SignalR und Joining Groups
- 3. SAAJ API für SOAP-Antwort
- 4. Joining Tabellenvariable und abgeleitete Tabelle
- 5. Java JAXB und Vererbung
- 6. JAXB und Konstrukteure
- 7. JAXB Such- und Löschelementknoten
- 8. Ist SAAJ kompatibel mit MTOM + XOP? aber
- 9. Joining Google und Facebook Kontakt auf Android
- 10. Joining & Gruppieren SQL Ergebnisse
- 11. Grundlegende SQL-Joining-Tabellen
- 12. Mysql Joining mit Fall
- 13. PHP MySQL Tabellen Joining
- 14. Joining Tabelle Werte
- 15. Laravel Table Joining
- 16. JAXB Compiler und Attribut Reihenfolge
- 17. Unmarshaller und Schema in JAXB
- 18. JAXB und Sammlungen mit Generika
- 19. JAXB und Namespace-less XML
- 20. JAXB und enum implementierende Schnittstelle
- 21. JAXB und @XmlType propOrder Attribut
- 22. Serialisierung mit JAXB und Jede
- 23. Joining Three Tables
- 24. Codeigniter - Joining abgeleitete Tabellen
- 25. Joining 2 Ergebnis
- 26. Joining Punkte mit javaFX
- 27. Joining 4 Tabellen SQL
- 28. Joining 3 Tabellen
- 29. Inner Joining drei Tabellen
- 30. Rails - Joining mehr Tabellen
das ist eine sehr gute Antwort. Also habe ich eine andere API gefunden, der Name ist Jax-Ws. Welchen Weg besser? SAAJ & JAXP oder Jax-Ws? – kodmanyagha
Sie fragen den Schöpfer von JAXB, was er bevorzugt? Was erwarten Sie von ihm zu sagen ... –
@StephenD - Ich bin Teil der Gruppe, die JAXB (JSR-222) erstellt, und der EclipseLink JAXB (MOXy) führen :). JAXB ist der Standard-Binding-Layer für JAX-WS, sodass beide gut zusammenarbeiten. –