Tôi đang tạo một dịch vụ web có trục cam. Tôi đang sử dụng SAAJ, JAXB và Servlet. Tôi có thể marshall và unmarshall một lớp học với JAXB một cách chính xác. Nhưng làm thế nào tôi có thể sử dụng cùng SAAJ và JAXB cho truyền thông SOAP. Tôi muốn đặt văn bản xml đã được chuyển đổi JAXB vào thẻ SOAP BODY với SAAJ. Tôi có thể làm cái này như thế nào? Tôi đọc các tài liệu SAAJ trên trang web của Oracle nhưng không dễ hiểu. Họ nói rất phức tạp.Tham gia SAAJ và JAXB
9
A
Trả lời
18
Bạn có thể làm như sau:
Demo
SOAPBody
thực hiện org.w3c.dom.Node
vì vậy bạn có thể có JAXB bạn thực hiện soái với nó:
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)
Bên dưới là một mô hình Java đơn giản chúng ta sẽ sử dụng ví dụ này:
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;
}
}
Output
Dưới đây là kết quả từ chạy code demo (Tôi đã định dạng nó trong câu trả lời của tôi để làm cho nó dễ dàng hơn để đọc) .
<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>
CẬP NHẬT
Dưới đây là một ví dụ sử dụng JAXB với các API JAX-WS (để biết chi tiết về dịch vụ see: 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());
}
}
Các vấn đề liên quan
- 1. mysql - subqueries và tham gia
- 2. Chọn sum và bên tham gia
- 3. mysql tham gia 3 bảng và đếm
- 4. Tiêu chuẩn Hibernate và nhiều tham gia
- 5. THAM GIA VÀ CHỌN từ nhiều bảng
- 6. Mysql trái tham gia và số tiền
- 7. Chủ đề ngủ và thread tham gia
- 8. phạm vi đường ray và tham gia
- 9. LinqToSQL Chọn và SelectMany vs Tham gia
- 10. Tham gia chuỗi trước, giữa và sau
- 11. SQL server tham gia bảng và trục
- 12. JAXB và lớp trừu tượng
- 13. SQL Tham gia và hiển thị kết quả nếu tham gia sai
- 14. Sự khác biệt giữa việc tham gia trái và tham gia bên ngoài bên trái
- 15. Django ForeignKey với null = True, bên tham gia, và để lại bên ngoài tham gia
- 16. Cách kết hợp tham gia bên trong và bên trái tham gia vào Khung thực thể
- 17. SQL tham gia ba bảng, tham gia ưu tiên
- 18. MySQL THAM GIA Nhiều Tham gia trên cùng một bảng?
- 19. HQL tham gia trái: Đường dẫn dự kiến tham gia
- 20. Nếu sau đó tham gia tham gia khác
- 21. lượt rẽ trái tham gia vào bên trong tham gia
- 22. Zend Db Chọn? Điều kiện tham gia * tham gia
- 23. JAX-WS vs SAAJ Style, sử dụng
- 24. Nhiều Chọn và Tham gia với LINQ và Lambda
- 25. Powershell "tham gia"
- 26. postgresql tự tham gia
- 27. THAM GIA ba bảng
- 28. SQL Nhiều tham gia
- 29. Bash tham gia lệnh
- 30. Tham gia Rx Streams
đó là câu trả lời rất hay. Vì vậy, tôi tìm thấy một api khác tên là jax-ws. cách nào tốt hơn? SAAJ & JAXP hoặc jax-ws? – kodmanyagha
Bạn đang hỏi người tạo ra JAXB những gì anh ấy thích? Những gì bạn mong đợi anh ta nói ... –
@StephenD - Tôi là một phần của nhóm đã tạo ra JAXB (JSR-222), và EclipseLink JAXB (MOXy) dẫn :). JAXB là lớp ràng buộc mặc định cho JAX-WS, vì vậy cả hai làm việc độc đáo với nhau. –