오픈 소스 OWL-S API http://on.cs.unibas.ch/owls-api/을 사용하여 axis2를 사용하고자합니다. 요청을 올바르게 보내도록 관리했지만 응답이 오면 응답을 변환하는 데 문제가 있습니다. 내 질문에 대답하기 쉽게하기 위해 프로젝트를 가져 오지 않고도 실행해야하는 독립 실행 형 코드를 제공하고 있습니다. DOMSource 인을 설정하려면 :xalan 자바 변환을 axis2 객체에 적용 하시겠습니까?
String xmlString = "<ns1:countResponse xmlns:ns1=\"http://www.test.de/pill-counter\"><ns1:value>0</ns1:value><ns1:value>0</ns1:value><ns1:value>1</ns1:value><ns1:value>0</ns1:value><ns1:value>0</ns1:value><ns1:value>0</ns1:value></ns1:countResponse>";
ByteArrayInputStream xmlStream = new ByteArrayInputStream(xmlString.getBytes());
OMElement test = null;
try {
StAXBuilder builder = new StAXOMBuilder(xmlStream);
test = (OMElement) builder.getDocument().getChildren().next();
} catch (XMLStreamException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
OMElement documentElement = null;
try {
documentElement = AXIOMUtil.stringToOM(DOOMAbstractFactory.getOMFactory(), xmlString);
} catch (XMLStreamException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
SAAJConverterFactory convFactory = (SAAJConverterFactory) FactoryRegistry.getFactory(org.apache.axis2.jaxws.message.factory.SAAJConverterFactory.class);
SAAJConverter conv = convFactory.getSAAJConverter();
//Create soap 1.1 message
SOAPMessage msg = MessageFactory.newInstance().createMessage();
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
SOAPBody soapBody = se.getBody();
javax.xml.soap.SOAPFactory soapFactory = javax.xml.soap.SOAPFactory.newInstance();
response = conv.toSAAJ(documentElement, soapBody, soapFactory);
Node root = response;
그리고 지금은 변환을 적용하는 :
Transformer transformer = null;
try {
transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader("<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:ns1=\"http://www.test.de/pill-counter\">\n\n\t<xsl:template match=\"/\">\n\t\t<xsl:value-of select=\"sum(*/ns1:value)\" />\n\t</xsl:template>\n</xsl:stylesheet>")));
} catch (TransformerConfigurationException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (TransformerFactoryConfigurationError e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
transformer.transform(new DOMSource(root), new StreamResult(System.out));
} catch (TransformerException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
이 코드를 실행의 결과는 NullPointerException이있다.
SystemId unknown; Line num.0; Column num.0; java.lang.NullPointerException
내가 구글의의 Xalan-J 메일 링리스트와 행운이 사이트에서이 문제에 대한 해결책을 찾고 노력했다. 나는 또한 여러 다른 코딩 방법과 운이없는 시도했다. 누구의 아이디어라도?
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
InputSource is = new InputSource(new StringReader(documentElement.toString()));
Document document = null;
try{
document=db.parse(is);
} catch (SAXException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (IOException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
사용중인 Axis2 및 Axiom 버전에 대한 정보를 추가 할 수 있습니까? –
안녕하세요, 최신 축 버전 axis2-1.6.1과 공리 1.2.12를 사용하고 있습니다. 도움을 받으려면 – m1416
Axiom 1.2.12에 적용 할 수 있도록 내 대답을 편집했습니다. –