이전에는 XML 파일을 읽고 응답으로 반환하는 축을 사용하여 웹 서비스에 대한 하나의 처리기를 구현했습니다. 내 코드는 아래와 같습니다.축 2 응답 바꾸기
try {
Message msg = msgContext.getResponseMessage();
MessageContext context = MessageContext.getCurrentContext();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("login_rsp_xml");
if(in==null){
System.out.println("in is empty!!!");
}
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(in);
msg.getSOAPPart().setContent(new DOMSource(doc));
System.out.println("return file>>"+fileName);
} catch (Exception e) {
System.setProperty("req_no", null);
e.printStackTrace();
}
이제 axis2를 사용하여 동일한 작업을 수행해야합니다. 누구든지 축 2에서 나가는 응답을 대체하는 방법을 알고 있습니까? 파일을 문자열로 변환하려고 시도했는데 envelope.setText()를 호출했지만 실패하고 "org.apache.axiom.soap.SOAPProcessingException: Can not detach SOAP Body, SOAP Envelope must have a Body !!
"예외가 발생합니다.
도움말/조언에 미리 감사드립니다. 축 2의
내 코드 :
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.description.AxisMessage;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.engine.Handler;
import org.apache.axis2.handlers.AbstractHandler;
import org.apache.axis2.jaxws.message.Message;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class SamRspHandler extends AbstractHandler implements Handler {
public String getFileContent(String path) throws Exception{
InputStream in = this.getClass().getClassLoader()
//.getResourceAsStream("/xmlFiles/loginRspHeader.xml");
.getResourceAsStream(path);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc2 = dBuilder.parse(in);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
"yes");
StringWriter writer = new StringWriter();
transformer
.transform(new DOMSource(doc2), new StreamResult(writer));
String output2 = writer.getBuffer().toString();
return output2;
}
public InvocationResponse invoke(MessageContext msgContext)
throws AxisFault {
System.out.println("In Response");
String content = msgContext.getEnvelope().toString();
try {
System.out.println("zzzz>>"+System.getProperty("abc"));
msgContext.getEnvelope().setText("abc");
} catch (Exception e) {
e.printStackTrace();
}
return InvocationResponse.CONTINUE;
}
public void revoke(MessageContext msgContext) {
}
}
감사를 설정합니다. 그러나 나는 비누 반응을 완전히 대체하고 축에서 할 수 있습니다. 축 2에서 어떻게하는지 알고 있습니까? – bear
envelope.setText ("abc")를 호출했지만 실패하고 "org.apache.axiom.soap.SOAPProcessingException : SOAP Body를 분리 할 수 없습니다. SOAP Envelope에 Body가 있어야합니다 !!"라는 예외가 발생합니다. – bear
Axis2 코드보기. – shazin