我正在尝试实现一个SOAP客户端(我发现了代码here并且我正在尝试使其适应我的问题(将文件发送到endPointURL))。 我只有soapAction和endPointURL将我的消息发送到服务器。
public class SOAPClient {
private static final Logger logger = LoggerFactory.getLogger(SOAPClient.class);
private static File file = null;
public static void main(String args[]) {
String soapEndpointUrl = "url?wsdl";
String soapAction = "soapAction(https)"
file = new File("myFileToSend.xml");
callSoapWebService(soapEndpointUrl, soapAction,file);
}
private static void createSoapEnvelope(SOAPMessage soapMessage,Document doc) throws SOAPException {
SOAPPart soapPart = soapMessage.getSOAPPart();
DOMSource domSource = new DOMSource(doc);
soapPart.setContent(domSource);
//Error here !
SOAPEnvelope envelope = soapMessage.getSOAPPart().getEnvelope();
SOAPHeader header = envelope.getHeader();
}
private static void callSoapWebService(String soapEndpointUrl, String soapAction,File f) {
try {
file = f;
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);
if(soapResponse!=null){
// Print the SOAP Response
logger.info("Response SOAP Message:");
soapResponse.writeTo(System.out);
logger.info("----------------------------------------------");
logger.info("soap reponse : "+soapResponse);
}
soapConnection.close();
} catch (Exception e) {
logger.error("\nError occurred while sending SOAP Request to Server!\n");
e.printStackTrace();
}
}
private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
Document doc = addXmlFile();
SOAPMessage soapMessage = null;
if(doc!=null){
MessageFactory messageFactory = MessageFactory.newInstance();
soapMessage = messageFactory.createMessage();
createSoapEnvelope(soapMessage,doc);
soapMessage.saveChanges();
logger.info(soapMessage.toString());
/* Print the request message, just for debugging purposes */
logger.info("Request SOAP Message:");
soapMessage.writeTo(System.out);
}
return soapMessage;
}
@SuppressWarnings("finally")
private static Document addXmlFile() {
Document doc = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(file.getAbsoluteFile());
return doc;
} catch (SAXException | IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
finally {
return doc;
}
}
实际上当我尝试启动此代码时,我收到错误:SAAJ0514无法从给定源创建信封,因为根元素未命名为Envelope。 错误SAAJ0511:无法从给定的来源创建信封
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:117)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:125)
at SOAPClient.createSoapEnvelope(SOAPClient.java:70)
at SOAPClient.createSOAPRequest(SOAPClient.java:132)
at SOAPClient.callSoapWebService(SOAPClient.java:103)
at SOAPClient.main(SOAPClient.java:39)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.lookForEnvelope(SOAPPartImpl.java:154)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:121)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:110)
... 6 more
我在许多网站上看到了一些类似的错误,但没有一个真正帮助我找到如何纠正这个问题(有些解释了删除服务器上的一些参数)。
感谢您的答案。
答案 0 :(得分:0)
在与我合作的公司中发生了错误,删除?wsdl部分是我需要做的确切工作。