soapmessageprovider.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 387 行 · 第 1/2 页
JAVA
387 行
SOAPMessage response;
// Transport header check
assertTrue(request.getContentDescription() != null);
assertTrue(request.getContentDescription().equals(SoapMessageProvider.XML_REQUEST));
// Additional assertion checks
assertTrue(countAttachments(request) == 0);
// Build the Response
MessageFactory factory = MessageFactory.newInstance();
String responseXML = responseMsgStart + XML_RETURN + responseMsgEnd;
response = factory.createMessage(null, new ByteArrayInputStream(responseXML.getBytes()));
// Set a content description
response.setContentDescription(SoapMessageProvider.XML_RESPONSE);
return response;
}
/**
* Get the response for an XML only request
* @param request
* @param dataElement
* @return SOAPMessage
*/
private SOAPMessage getXMLEmptyBodyResponse(SOAPMessage request, SOAPElement dataElement) throws Exception {
SOAPMessage response;
// Additional assertion checks
assertTrue(countAttachments(request) == 0);
// Build the Response
MessageFactory factory = MessageFactory.newInstance();
response = factory.createMessage();
return response;
}
/**
* Get the response for an XML and an Attachment request
* @param request
* @param dataElement
* @return SOAPMessage
*/
private SOAPMessage getXMLAttachmentResponse(SOAPMessage request, SOAPElement dataElement) throws Exception {
SOAPMessage response;
// Additional assertion checks
assertTrue(countAttachments(request) == 1);
AttachmentPart requestAP = (AttachmentPart) request.getAttachments().next();
StreamSource contentSS = (StreamSource) requestAP.getContent();
String content = getAsString(contentSS);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Build the Response
MessageFactory factory = MessageFactory.newInstance();
String responseXML = responseMsgStart + ATTACHMENT_RETURN + responseMsgEnd;
response = factory.createMessage(null, new ByteArrayInputStream(responseXML.getBytes()));
// Create and attach the attachment
AttachmentPart ap = response.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(ID);
response.addAttachmentPart(ap);
return response;
}
/**
* Get the response for an XML and an MTOM Attachment request
* @param request
* @param dataElement
* @return SOAPMessage
*/
private SOAPMessage getXMLMTOMResponse(SOAPMessage request, SOAPElement dataElement) throws Exception {
SOAPMessage response;
TestLogger.logger.debug("Received MTOM Message");
// Additional assertion checks
assertTrue(countAttachments(request) == 1);
AttachmentPart requestAP = (AttachmentPart) request.getAttachments().next();
StreamSource contentSS = (StreamSource) requestAP.getContent();
String content = getAsString(contentSS);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
TestLogger.logger.debug("The MTOM Request Message appears correct.");
// Build the Response
MessageFactory factory = MessageFactory.newInstance();
String responseXML = responseMsgStart + MTOM_RETURN + responseMsgEnd;
response = factory.createMessage(null, new ByteArrayInputStream(responseXML.getBytes()));
// Create and attach the attachment
AttachmentPart ap = response.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(ID);
response.addAttachmentPart(ap);
TestLogger.logger.debug("Returning the Response Message");
return response;
}
/**
* Get the response for an XML and an MTOM Attachment request
* @param request
* @param dataElement
* @return SOAPMessage
*/
private SOAPMessage getXMLSWARefResponse(SOAPMessage request, SOAPElement dataElement) throws Exception {
SOAPMessage response;
// Additional assertion checks
assertTrue(countAttachments(request) == 1);
AttachmentPart requestAP = (AttachmentPart) request.getAttachments().next();
assertTrue(requestAP.getContentId().equals(ID));
StreamSource contentSS = (StreamSource) requestAP.getContent();
String content = getAsString(contentSS);
assertTrue(content.contains(SoapMessageProvider.TEXT_XML_ATTACHMENT));
// Build the Response
MessageFactory factory = MessageFactory.newInstance();
String responseXML = responseMsgStart + SWAREF_RETURN + responseMsgEnd;
response = factory.createMessage(null, new ByteArrayInputStream(responseXML.getBytes()));
// Create and attach the attachment
AttachmentPart ap = response.createAttachmentPart(SoapMessageProvider.TEXT_XML_ATTACHMENT, "text/xml");
ap.setContentId(ID);
response.addAttachmentPart(ap);
return response;
}
private void throwSOAPFaultException() throws SOAPFaultException {
try {
MessageFactory mf = MessageFactory.newInstance();
SOAPFactory sf = SOAPFactory.newInstance();
SOAPMessage m = mf.createMessage();
SOAPBody body = m.getSOAPBody();
SOAPFault fault = body.addFault();
QName faultCode = new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Client");
fault.setFaultCode(faultCode);
fault.setFaultString("sample fault");
Detail detail = fault.addDetail();
Name deName = sf.createName("detailEntry");
SOAPElement detailEntry = detail.addDetailEntry(deName);
detailEntry.addTextNode("sample detail");
fault.setFaultActor("sample actor");
SOAPFaultException sfe = new SOAPFaultException(fault);
throw sfe;
} catch (SOAPFaultException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void throwWebServiceException() throws WebServiceException {
throw new WebServiceException("A WSE was thrown");
}
/**
* Count Attachments
* @param msg
* @return
*/
private int countAttachments(SOAPMessage msg) {
Iterator it = msg.getAttachments();
int count = 0;
assertTrue(it != null);
while (it.hasNext()) {
it.next();
count++;
}
return count;
}
public static String getAsString(StreamSource ss) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Result result = new StreamResult(out);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(ss, result);
String text = new String(out.toByteArray());
return text;
}
private void assertTrue(boolean testAssertion) {
if (!testAssertion) {
throw new RuntimeException("Assertion false");
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?