I have created a java package to Consume `ews/Exchange.asmx` in Jdeveloper 12c. Below is code which working absolutely Fine using Main Method inside jdeveloper.
public class Ews {
public static String readmailbody(String custno,String user,String pwd,String domain) {
try {
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
ExchangeService service = new ExchangeService();
ExchangeCredentials credentials = new WebCredentials(user, pwd, domain);
service.setCredentials(credentials);
service.setUrl(new URI("https://host.domain.com/ews/Exchange.asmx"));
ItemView view = new ItemView(1);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject,ItemSchema.DateTimeReceived));
FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox,new SearchFilter.SearchFilterCollection(LogicalOperator.Or,new SearchFilter.ContainsSubstring(ItemSchema.Subject,custno)),view);
String senderEmail = "";
String mailto = "";
for (Item item : findResults.getItems()) {
item.load();
if (item instanceof EmailMessage) {
senderEmail = "From : " + ((EmailMessage) item).getSender().getAddress();
mailto = "To : " + ((EmailMessage) item).getReceivedBy().getAddress();
}
String mailcc = "Cc : " + item.getDisplayCc();
String subject = "Subject : " + item.getSubject();
String body =
senderEmail + "<br>" + mailto + "<br>" + mailcc + "<br>" + subject +
MessageBody.getStringFromMessageBody(item.getBody());
String proc = "call xx_ews_exchange(?,?,?,?,?,?)";
CallableStatement pstmt = conn.prepareCall(proc);
pstmt.setString(1, senderEmail);
pstmt.setString(2, mailto);
pstmt.setString(3, mailcc);
pstmt.setString(4, subject);
pstmt.setString(5, body);
pstmt.setString(6, custno);
pstmt.executeUpdate();
pstmt.close();
return "Success";
}
} catch (SQLException sqle) {
return "SQLException " + convertException (sqle);
} catch (ServiceLocalException sle) {
return "ServiceLocalException " + convertException (sle);
} catch (URISyntaxException urise) {
return "URISyntaxException " + convertException (urise);
} catch (Exception e) {
return "Other Exception " + convertException (e);
}
return "" ;
}
public static String convertException (Throwable p_stack) {
StringWriter sw = new StringWriter();
p_stack.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
return exceptionAsString;
}
}
However on the other Hand I want to import this method in Oracle Database 12.2 with java version as below
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
I have imported all depended libraries into Oracle database using below Command
loadjava -u user/pass -r -v -f -genmissing commons-lang3-3.9.jar commons-logging-1.2.jar ews-java-api-2.0.jar httpcore-4.4.12.jar joda-time-2.3.jar commons-codec-1.10.jar httpclient-4.4.1.jar
In Last I have import Ews.java into Oracel database
loadjava -u user/pass -v -r -t Ews.java
Then Created A Function to Call Java Method `readmailbody`
CREATE OR REPLACE FUNCTION readmailbody (custno VARCHAR2,p_user VARCHAR2,p_pwd VARCHAR2,P_domain VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'company.ews.exchange.Ews.readmailbody(java.lang.String ,java.lang.String ,java.lang.String ,java.lang.String ) return java.lang.String';
and Finally Called Above Function as below
declare
a VARCHAR2(4000);
BEGIN
select readmailbody ('Search String','User','Pass','domain') INTO a FROM DUAL;
DBMS_OUTPUT.PUT_LINE (a);
END;
Once function called it return below Error
Other Exception microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. The request failed. null
at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:74)
at microsoft.exchange.webservices.data.core.request.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:158)
at microsoft.exchange.webservices.data.core.ExchangeService.findItems(ExchangeService.java:985)
at microsoft.exchange.webservices.data.core.ExchangeService.findItems(ExchangeService.java:1028)
at microsoft.exchange.webservices.data.core.ExchangeService.findItems(ExchangeService.java:1088)
at mtbc.ews.exchange.Ews.readmailbody(Ews:63)
Caused by: microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException: The request failed. null
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:729)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:639)
at microsoft.exchange.webservices.data.core.request.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:62)
... 5 more
Caused by: org.apache.http.client.ClientProtocolException
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at microsoft.exchange.webservices.data.core.request.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:292)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:720)
... 7 more
Caused by: org.apache.http.ProtocolException: Invalid header: or
at org.apache.http.impl.io.AbstractMessageParser.parseHeaders(AbstractMessageParser.java:230)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:266)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
... 10 more