[英]javax.xml.ws.WebServiceException: javax.xml.soap.SOAPException: Fault code QName must be namespace qualified! when deploying in weblogic server 12c
[英]Getting javax.xml.soap.SOAPException: Content-Type not specified error on Oracle weblogic server while calling web service through Java
我已經使用Jdeveloper工具編寫了一個Java代碼來調用外部Web服務。 當我從Jdeveloper運行我的代碼時,它運行良好。 但是我將我的代碼部署在Oracle weblogic 10.3.6服務器上,然后嘗試運行此代碼,然后出現以下錯誤-
javax.xml.soap.SOAPException:未指定Content-Type
這是我的代碼-
public static String callTestService(String soapRequestXml, String url) {
try{
final boolean isHttps = url.toLowerCase().startsWith("https");
HttpsURLConnection httpsConnection = null;
// Open HTTPS connection
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
if (isHttps) {
// Create SSL context and trust all certificates
SSLContext sslContext = SSLContext.getInstance("SSL");
//TrustManager[] trustAll= new TrustManager[] {new TrustAllCertificates()};
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Set trust all certificates context to HttpsURLConnection
HttpsURLConnection
.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
// Open HTTPS connection
// URL url1 = new URL(url);
URL url1 = new URL(null, url, new sun.net.www.protocol.https.Handler());
httpsConnection = (HttpsURLConnection) url1.openConnection();
// Trust all hosts
// httpsConnection.setHostnameVerifier(new TrustAllHosts());
// Connect
//Use below (2 lines) if Host name verification needs to turned off
MyHostnameVerifier HostVerifier = new MyHostnameVerifier();
httpsConnection.setHostnameVerifier(HostVerifier);
httpsConnection.connect();
}
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
System.out.println("create connection");
// SOAPMessage soapRequest = MessageFactory.newInstance().createMessage(new MimeHeaders(),
// new ByteArrayInputStream(soapRequestXml.getBytes()));
SOAPMessage soapRequest = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(new MimeHeaders() ,
new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));
// SOAPMessage s = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
// SOAPPart soapPart = soapRequest.getSOAPPart();
// SOAP Envelope
// SOAPEnvelope envelope = soapPart.getEnvelope();
// envelope.addNamespaceDeclaration("Dokumentai", "http://vmi.lt/ais/xsd/daa");
// MessageFactory messageFactory = MessageFactory.newInstance();
//SOAPMessage soapRequest = messageFactory.createMessage(new MimeHeaders(),soapRequestXml);
// MessageFactory messageFactory = MessageFactory.newInstance();
// SOAPMessage soapRequest = messageFactory.createMessage();
// SOAPPart soapPart = soapRequest.getSOAPPart();
// SOAPEnvelope envelope = soapPart.getEnvelope();
// SOAPBody soapBody = envelope.getBody();
//soapBody.setTextContent(soapRequestXml);
// soapRequest.setContentDescription(soapRequestXml);
// SOAPPart soapPart = soapRequest.getSOAPPart();
//SOAPEnvelope envelope = soapPart.getEnvelope();
// String serverURI = "myhost";
// envelope.addNamespaceDeclaration("xmlns",
// "http://vmi.lt/ais/xsd/daa");
// SOAP Envelope
// SOAPEnvelope envelope = soapPart.setContent(soapRequestXml);
// System.out.println("SOAP "+ soapRequest.writeTo(System.out));
MimeHeaders headers = soapRequest.getMimeHeaders();
headers.setHeader("SOAPAction",
"http://vmi.lt/ais/ws/handleMessage");
MimeHeaders headers1 = soapRequest.getMimeHeaders();
headers1.setHeader("Content-Type", "application/soap+xml; charset=utf-8");
soapRequest.saveChanges();
soapRequest.writeTo(System.out);
System.out.println("call request url");
// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(soapRequest, url);
soapResponse.setProperty("Content-Type", "application/xml; charset=utf-8");
soapResponse.setContentDescription("application/xml; charset=utf-8");
ByteArrayOutputStream soapResponseBaos = new ByteArrayOutputStream();
soapResponse.writeTo(soapResponseBaos);
String soapResponseXml = soapResponseBaos.toString();
return soapResponseXml;
}catch(Exception e){
return e.toString();
}
}
我已經嘗試了許多不同的方法,但是當我直接從Jdeveloper調用Web服務時,它工作正常,但是當我從Oracle Web邏輯服務器調用時,它卻失敗了。
你能幫我這個忙嗎?
我已解決此問題。請在代碼中進行以下更改。
MimeHeaders headers1 =新的MimeHeaders();
headers1.setHeader("Content-Type", "text/xml");
headers1.setHeader("Encoding", "UTF-8");
// SOAPMessage soapRequest =
// MessageFactory.newInstance().createMessage(new MimeHeaders(),
// new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));
SOAPMessage soapRequest = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createMessage(headers1 ,
new ByteArrayInputStream(soapRequestXml.getBytes(Charset.forName("UTF-8"))));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.