16
17 factory = new ActiveMQConnectionFactory("vm://localhost");
18
19 connection = factory.createConnection();
20
21 connection.start();
22
23 queue = new ActiveMQQueue("testQueue");
24
25 } catch (JMSException e) {
26
27 e.printStackTrace();
28
29 }
30
31 }
32
33 protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
34
35 if (req.getQueryString().endsWith("wsdl") || req.getQueryString().endsWith("WSDL")) {
36
37 try {
38
39 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
40
41 Message message = session.createMessage();
42
43 //这个属性用来标示请求是否是WSDL请求,后面的Listener会根据它来调用具体的WebService。
44
45 message.setBooleanProperty("isWsdl", true);
46
47 message.setJMSReplyTo(session.createTemporaryQueue());
48
49 session.createProducer(queue).send(message);
50
51 //等待回复消息,它里面包含Service返回的WSDL,这里使用了一个选择器。
52
53 String selector = String.format("JMSCorrelationID='%s'", message.getJMSMessageID());
54
55 MessageConsumer consumer = session.createConsumer(message.getJMSReplyTo(), selector);
56
57 TextMessage replyMessage = (TextMessage) consumer.receive();
58
59 //将WSDL返回给客户端。
60
61 resp.getWriter().write(replyMessage.getText());
62
63 } catch (Exception e) {
64
65 e.printStackTrace();
66
67 }
68
69 }
70
71 }
72
73 protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
74
75 try {
76
77 //首先从客户端请求中得到SOAP请求部分。
78
79 StringBuffer payLoad = new StringBuffer();
80
81 BufferedReader reader = req.getReader();
82
83 String temp;
84
85 while ((temp = reader.readLine()) != null) {
86
87 payLoad.append(temp);
88
89 }
90
91 //将SOAP请求封装成一个消息,发送到Queue。
92
93 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
94
95 Message message = session.createTextMessage(payLoad.toString());
96
97 message.setBooleanProperty("isWsdl", false);
98
99 message.setJMSReplyTo(session.createTemporaryQueue());
100
责任编辑:小草