Files
Artem Bilan cb052d2d98 URL Cleanup
This commit updates URLs to prefer the https protocol.
Redirects are not followed to avoid accidentally expanding intentionally
shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed.
Please review them to see if they can be manually resolved.

* [ ] http://blueprintcss.org (200) with 3 occurrences could not be migrated:
   ([https](https://blueprintcss.org) result AnnotatedConnectException).
* [ ] http://jmesnil.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://jmesnil.net/) result ConnectTimeoutException).
* [ ] http://jtds.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://jtds.sourceforge.net) result AnnotatedConnectException).
* [ ] http://www.jmesnil.net/stomp-websocket/doc/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.jmesnil.net/stomp-websocket/doc/) result ConnectTimeoutException).
* [ ] http://enfranchisedmind.com/blog/posts/jquery-periodicalupdater-ajax-polling/ (404) with 1 occurrences could not be migrated:
   ([https](https://enfranchisedmind.com/blog/posts/jquery-periodicalupdater-ajax-polling/) result SSLHandshakeException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK.
However, the https status was the same as the http request or http redirected to an https URL, so they were migrated.
Your review is recommended.

* [ ] http://smokejumperit.com (301) with 1 occurrences migrated to:
  https://blog.enfranchisedmind.com/posts/author/candide/?coming_from=smokejumperit.com ([https](https://smokejumperit.com) result UnknownHostException).
* [ ] http://sockjs.org (303) with 2 occurrences migrated to:
  https://github.com/sockjs/sockjs-client ([https](https://sockjs.org) result AnnotatedConnectException).
* [ ] http://platform.beta.mapquest.com/traffic/ (UnknownHostException) with 1 occurrences migrated to:
  https://platform.beta.mapquest.com/traffic/ ([https](https://platform.beta.mapquest.com/traffic/) result UnknownHostException).
* [ ] http://en.wikipedia.org/wiki/Caf%C3%A9 (301) with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Caf%25C3%25A9 ([https](https://en.wikipedia.org/wiki/Caf%C3%A9) result 400).
* [ ] http://ws.cdyne.com/WeatherWS/ (403) with 3 occurrences migrated to:
  https://ws.cdyne.com/WeatherWS/ ([https](https://ws.cdyne.com/WeatherWS/) result 403).
* [ ] http://blogs.oracle.com/swinger/entry/collections_trick_i_lru_cache (404) with 1 occurrences migrated to:
  https://blogs.oracle.com/swinger/entry/collections_trick_i_lru_cache ([https](https://blogs.oracle.com/swinger/entry/collections_trick_i_lru_cache) result 404).
* [ ] http://static.springsource.org/spring-integration/docs/latest-ga/reference/html/samples.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-integration/docs/latest-ga/reference/html/samples.html ([https](https://static.springsource.org/spring-integration/docs/latest-ga/reference/html/samples.html) result 404).
* [ ] http://static.springsource.org/spring-integration/reference/html/messaging-routing-chapter.html (301) with 3 occurrences migrated to:
  https://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html ([https](https://static.springsource.org/spring-integration/reference/html/messaging-routing-chapter.html) result 404).
* [ ] http://docs.spring.io/spring-integration/reference/html/samples.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-integration/reference/html/samples.html ([https](https://docs.spring.io/spring-integration/reference/html/samples.html) result 404).
* [ ] http://static.springsource.org/spring-integration/reference/htmlsingle/ (301) with 4 occurrences migrated to:
  https://docs.spring.io/spring-integration/reference/htmlsingle/ ([https](https://static.springsource.org/spring-integration/reference/htmlsingle/) result 404).
* [ ] http://xml.apache.org/xslt (404) with 3 occurrences migrated to:
  https://xml.apache.org/xslt ([https](https://xml.apache.org/xslt) result 404).
* [ ] http://customcode.info (503) with 1 occurrences migrated to:
  https://customcode.info ([https](https://customcode.info) result 503).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://activemq.apache.org/ with 1 occurrences migrated to:
  https://activemq.apache.org/ ([https](https://activemq.apache.org/) result 200).
* [ ] http://db.apache.org/derby/ with 1 occurrences migrated to:
  https://db.apache.org/derby/ ([https](https://db.apache.org/derby/) result 200).
* [ ] http://developer.mapquest.com/ with 1 occurrences migrated to:
  https://developer.mapquest.com/ ([https](https://developer.mapquest.com/) result 200).
* [ ] http://docs.oracle.com/javase/tutorial/jmx/mbeans/index.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/tutorial/jmx/mbeans/index.html ([https](https://docs.oracle.com/javase/tutorial/jmx/mbeans/index.html) result 200).
* [ ] http://static.springsource.org/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayCrLfSerializer.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayCrLfSerializer.html ([https](https://static.springsource.org/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayCrLfSerializer.html) result 200).
* [ ] http://static.springsource.org/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayStxEtxSerializer.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayStxEtxSerializer.html ([https](https://static.springsource.org/spring-integration/api/org/springframework/integration/ip/tcp/serializer/ByteArrayStxEtxSerializer.html) result 200).
* [ ] http://static.springsource.org/spring-integration/api/org/springframework/integration/store/MessageGroupStoreReaper.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring-integration/api/org/springframework/integration/store/MessageGroupStoreReaper.html ([https](https://static.springsource.org/spring-integration/api/org/springframework/integration/store/MessageGroupStoreReaper.html) result 200).
* [ ] http://static.springsource.org/spring-integration/docs/2.2.0.RC3/reference/htmlsingle/ (301) with 2 occurrences migrated to:
  https://docs.spring.io/spring-integration/docs/2.2.0.RC3/reference/htmlsingle/ ([https](https://static.springsource.org/spring-integration/docs/2.2.0.RC3/reference/htmlsingle/) result 200).
* [ ] http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/convert/ConversionService.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/convert/ConversionService.html ([https](https://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/convert/ConversionService.html) result 200).
* [ ] http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/serializer/Deserializer.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/serializer/Deserializer.html ([https](https://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/serializer/Deserializer.html) result 200).
* [ ] http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/serializer/Serializer.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/serializer/Serializer.html ([https](https://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/serializer/Serializer.html) result 200).
* [ ] http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html (301) with 1 occurrences migrated to:
  https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html ([https](https://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html) result 200).
* [ ] http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol ([https](https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol) result 200).
* [ ] http://en.wikipedia.org/wiki/Binary_Synchronous_Communications with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Binary_Synchronous_Communications ([https](https://en.wikipedia.org/wiki/Binary_Synchronous_Communications) result 200).
* [ ] http://en.wikipedia.org/wiki/CURL with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/CURL ([https](https://en.wikipedia.org/wiki/CURL) result 200).
* [ ] http://en.wikipedia.org/wiki/Control_character with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Control_character ([https](https://en.wikipedia.org/wiki/Control_character) result 200).
* [ ] http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol ([https](https://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol) result 200).
* [ ] http://en.wikipedia.org/wiki/Java_Message_Service with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Java_Message_Service ([https](https://en.wikipedia.org/wiki/Java_Message_Service) result 200).
* [ ] http://en.wikipedia.org/wiki/Netcat with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Netcat ([https](https://en.wikipedia.org/wiki/Netcat) result 200).
* [ ] http://en.wikipedia.org/wiki/Newline with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Newline ([https](https://en.wikipedia.org/wiki/Newline) result 200).
* [ ] http://en.wikipedia.org/wiki/OAuth with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/OAuth ([https](https://en.wikipedia.org/wiki/OAuth) result 200).
* [ ] http://en.wikipedia.org/wiki/SOAP with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/SOAP ([https](https://en.wikipedia.org/wiki/SOAP) result 200).
* [ ] http://en.wikipedia.org/wiki/Telnet with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Telnet ([https](https://en.wikipedia.org/wiki/Telnet) result 200).
* [ ] http://en.wikipedia.org/wiki/Transmission_Control_Protocol with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Transmission_Control_Protocol ([https](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) result 200).
* [ ] http://en.wikipedia.org/wiki/XML with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/XML ([https](https://en.wikipedia.org/wiki/XML) result 200).
* [ ] http://en.wikipedia.org/wiki/XPath with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/XPath ([https](https://en.wikipedia.org/wiki/XPath) result 200).
* [ ] http://en.wikipedia.org/wiki/XSLT with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/XSLT ([https](https://en.wikipedia.org/wiki/XSLT) result 200).
* [ ] http://hillert.blogspot.com/2011/01/marshal-json-data-using-jackson-in.html with 1 occurrences migrated to:
  https://hillert.blogspot.com/2011/01/marshal-json-data-using-jackson-in.html ([https](https://hillert.blogspot.com/2011/01/marshal-json-data-using-jackson-in.html) result 200).
* [ ] http://hillert.blogspot.com/2011/05/testing-email-notifications-with-apache.html with 1 occurrences migrated to:
  https://hillert.blogspot.com/2011/05/testing-email-notifications-with-apache.html ([https](https://hillert.blogspot.com/2011/05/testing-email-notifications-with-apache.html) result 200).
* [ ] http://james.apache.org/ with 1 occurrences migrated to:
  https://james.apache.org/ ([https](https://james.apache.org/) result 200).
* [ ] http://james.apache.org/server/3/quick-start.html with 1 occurrences migrated to:
  https://james.apache.org/server/3/quick-start.html ([https](https://james.apache.org/server/3/quick-start.html) result 200).
* [ ] http://jquery.com/ with 1 occurrences migrated to:
  https://jquery.com/ ([https](https://jquery.com/) result 200).
* [ ] http://meyerweb.com/eric/tools/dencoder/ with 1 occurrences migrated to:
  https://meyerweb.com/eric/tools/dencoder/ ([https](https://meyerweb.com/eric/tools/dencoder/) result 200).
* [ ] http://projects.spring.io/spring-integration/ with 2 occurrences migrated to:
  https://projects.spring.io/spring-integration/ ([https](https://projects.spring.io/spring-integration/) result 200).
* [ ] http://sizzlejs.com/ with 1 occurrences migrated to:
  https://sizzlejs.com/ ([https](https://sizzlejs.com/) result 200).
* [ ] http://tomcat.apache.org/ with 1 occurrences migrated to:
  https://tomcat.apache.org/ ([https](https://tomcat.apache.org/) result 200).
* [ ] http://twitter.com/huntchr with 1 occurrences migrated to:
  https://twitter.com/huntchr ([https](https://twitter.com/huntchr) result 200).
* [ ] http://www.360innovate.co.uk with 1 occurrences migrated to:
  https://www.360innovate.co.uk ([https](https://www.360innovate.co.uk) result 200).
* [ ] http://www.amqp.org/ with 1 occurrences migrated to:
  https://www.amqp.org/ ([https](https://www.amqp.org/) result 200).
* [ ] http://tempuri.org/ (302) with 1 occurrences migrated to:
  https://www.bing.com/ ([https](https://tempuri.org/) result 200).
* [ ] http://www.eclipse.org/jetty/ with 1 occurrences migrated to:
  https://www.eclipse.org/jetty/ ([https](https://www.eclipse.org/jetty/) result 200).
* [ ] http://www.eaipatterns.com/ (302) with 2 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com/ ([https](https://www.eaipatterns.com/) result 200).
* [ ] http://www.eaipatterns.com/gregor.html (302) with 1 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com/gregor.html ([https](https://www.eaipatterns.com/gregor.html) result 200).
* [ ] http://www.eaipatterns.com/ramblings/18_starbucks.html (302) with 1 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html ([https](https://www.eaipatterns.com/ramblings/18_starbucks.html) result 200).
* [ ] http://www.gnu.org/licenses/gpl.html with 1 occurrences migrated to:
  https://www.gnu.org/licenses/gpl.html ([https](https://www.gnu.org/licenses/gpl.html) result 200).
* [ ] http://fusesource.com (302) with 1 occurrences migrated to:
  https://www.jboss.org/ ([https](https://fusesource.com) result 200).
* [ ] http://www.microsoft.com/en-us/download/details.aspx?id=23650 with 2 occurrences migrated to:
  https://www.microsoft.com/en-us/download/details.aspx?id=23650 ([https](https://www.microsoft.com/en-us/download/details.aspx?id=23650) result 200).
* [ ] http://www.postgresql.org/ with 1 occurrences migrated to:
  https://www.postgresql.org/ ([https](https://www.postgresql.org/) result 200).
* [ ] http://www.rabbitmq.com/ with 6 occurrences migrated to:
  https://www.rabbitmq.com/ ([https](https://www.rabbitmq.com/) result 200).
* [ ] http://www.w3schools.com/xml/ with 1 occurrences migrated to:
  https://www.w3schools.com/xml/ ([https](https://www.w3schools.com/xml/) result 200).
* [ ] http://forum.springsource.org/archive/index.php/t-84006.html (301) with 1 occurrences migrated to:
  https://forum.spring.io/archive/index.php/t-84006.html ([https](https://forum.springsource.org/archive/index.php/t-84006.html) result 301).
* [ ] http://forum.spring.io/forum/spring-projects/integration/117523-starting-multiple-consumers?p=589517 with 1 occurrences migrated to:
  https://forum.spring.io/forum/spring-projects/integration/117523-starting-multiple-consumers?p=589517 ([https](https://forum.spring.io/forum/spring-projects/integration/117523-starting-multiple-consumers?p=589517) result 301).
* [ ] http://forum.spring.io/forum/spring-projects/integration/119081-dynamic-inbound-channel-adapter-creation with 1 occurrences migrated to:
  https://forum.spring.io/forum/spring-projects/integration/119081-dynamic-inbound-channel-adapter-creation ([https](https://forum.spring.io/forum/spring-projects/integration/119081-dynamic-inbound-channel-adapter-creation) result 301).
* [ ] http://jira.springframework.org/browse/ROO-909 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/ROO-909 ([https](https://jira.springframework.org/browse/ROO-909) result 301).
* [ ] http://jquery.org/license with 1 occurrences migrated to:
  https://jquery.org/license ([https](https://jquery.org/license) result 301).
* [ ] http://junit.org/ with 1 occurrences migrated to:
  https://junit.org/ ([https](https://junit.org/) result 301).
* [ ] http://mina.apache.org/sshd-project with 1 occurrences migrated to:
  https://mina.apache.org/sshd-project ([https](https://mina.apache.org/sshd-project) result 301).
* [ ] http://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx with 1 occurrences migrated to:
  https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx ([https](https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx) result 301).
* [ ] http://projects.spring.io/spring-boot with 1 occurrences migrated to:
  https://projects.spring.io/spring-boot ([https](https://projects.spring.io/spring-boot) result 301).
* [ ] http://springsource.com with 1 occurrences migrated to:
  https://springsource.com ([https](https://springsource.com) result 301).
* [ ] http://support.microsoft.com/default.aspx?scid=kb;EN-US;914277 with 2 occurrences migrated to:
  https://support.microsoft.com/default.aspx?scid=kb;EN-US;914277 ([https](https://support.microsoft.com/default.aspx?scid=kb;EN-US;914277) result 301).
* [ ] http://www.360innovate.co.uk/blog/2009/03/periodicalupdater-for-jquery/ with 1 occurrences migrated to:
  https://www.360innovate.co.uk/blog/2009/03/periodicalupdater-for-jquery/ ([https](https://www.360innovate.co.uk/blog/2009/03/periodicalupdater-for-jquery/) result 301).
* [ ] http://www.eaipatterns.com/eaipatterns.html (302) with 1 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com/eaipatterns.html ([https](https://www.eaipatterns.com/eaipatterns.html) result 301).
* [ ] http://www.google.com/talk/ with 1 occurrences migrated to:
  https://www.google.com/talk/ ([https](https://www.google.com/talk/) result 301).
* [ ] http://www.gradle.org with 4 occurrences migrated to:
  https://www.gradle.org ([https](https://www.gradle.org) result 301).
* [ ] http://www.gradle.org/docs/current/userguide/application_plugin.html with 10 occurrences migrated to:
  https://www.gradle.org/docs/current/userguide/application_plugin.html ([https](https://www.gradle.org/docs/current/userguide/application_plugin.html) result 301).
* [ ] http://www.gradle.org/docs/current/userguide/jetty_plugin.html with 1 occurrences migrated to:
  https://www.gradle.org/docs/current/userguide/jetty_plugin.html ([https](https://www.gradle.org/docs/current/userguide/jetty_plugin.html) result 301).
* [ ] http://www.mapquestapi.com/ with 1 occurrences migrated to:
  https://www.mapquestapi.com/ ([https](https://www.mapquestapi.com/) result 301).
* [ ] http://www.mongodb.org/display/DOCS/Querying with 1 occurrences migrated to:
  https://www.mongodb.org/display/DOCS/Querying ([https](https://www.mongodb.org/display/DOCS/Querying) result 301).
* [ ] http://www.opensource.org/licenses/mit-license.php with 1 occurrences migrated to:
  https://www.opensource.org/licenses/mit-license.php ([https](https://www.opensource.org/licenses/mit-license.php) result 301).
* [ ] http://www.oracle.com/technetwork/indexes/downloads/index.html with 2 occurrences migrated to:
  https://www.oracle.com/technetwork/indexes/downloads/index.html ([https](https://www.oracle.com/technetwork/indexes/downloads/index.html) result 301).
* [ ] http://www.rabbitmq.com/install.html with 4 occurrences migrated to:
  https://www.rabbitmq.com/install.html ([https](https://www.rabbitmq.com/install.html) result 301).
* [ ] http://www.springsource.org/node/3598 with 1 occurrences migrated to:
  https://www.springsource.org/node/3598 ([https](https://www.springsource.org/node/3598) result 301).
* [ ] http://www.springsource.org/spring-amqp with 4 occurrences migrated to:
  https://www.springsource.org/spring-amqp ([https](https://www.springsource.org/spring-amqp) result 301).
* [ ] http://www.springsource.org/spring-integration with 35 occurrences migrated to:
  https://www.springsource.org/spring-integration ([https](https://www.springsource.org/spring-integration) result 301).
* [ ] http://www.springintegration.org/ (301) with 7 occurrences migrated to:
  https://www.springsource.org/spring-integration/ ([https](https://www.springintegration.org/) result 301).
* [ ] http://www.springsource.org/spring-security with 1 occurrences migrated to:
  https://www.springsource.org/spring-security ([https](https://www.springsource.org/spring-security) result 301).
* [ ] http://www.springsource.org/spring-web-services with 1 occurrences migrated to:
  https://www.springsource.org/spring-web-services ([https](https://www.springsource.org/spring-web-services) result 301).
* [ ] http://www.springsource.org/sts with 1 occurrences migrated to:
  https://www.springsource.org/sts ([https](https://www.springsource.org/sts) result 301).
* [ ] http://www.youtube.com/SpringSourceDev with 2 occurrences migrated to:
  https://www.youtube.com/SpringSourceDev ([https](https://www.youtube.com/SpringSourceDev) result 301).
* [ ] http://dev.twitter.com with 1 occurrences migrated to:
  https://dev.twitter.com ([https](https://dev.twitter.com) result 302).
* [ ] http://dev.twitter.com/ with 4 occurrences migrated to:
  https://dev.twitter.com/ ([https](https://dev.twitter.com/) result 302).
* [ ] http://visualvm.java.net/ with 1 occurrences migrated to:
  https://visualvm.java.net/ ([https](https://visualvm.java.net/) result 302).
* [ ] http://www.springsource.com/developer/sts with 4 occurrences migrated to:
  https://www.springsource.com/developer/sts ([https](https://www.springsource.com/developer/sts) result 302).

# Ignored
These URLs were intentionally ignored.

* http://java.sun.com/JSP/Page with 40 occurrences
* http://java.sun.com/jsp/jstl/core with 34 occurrences
* http://java.sun.com/jsp/jstl/fmt with 2 occurrences
* http://java.sun.com/jsp/jstl/functions with 29 occurrences
* http://localhost:8080/broadcast/foo with 2 occurrences
* http://localhost:8080/chat with 1 occurrences
* http://localhost:8080/foo with 3 occurrences
* http://localhost:8080/monitoring with 1 occurrences
* http://localhost:8080/multipart-http/inboundAdapter.htm with 1 occurrences
* http://localhost:8080/rest-http/services/employee/ with 3 occurrences
* http://localhost:8080/rest-http/services/employee/0/search with 1 occurrences
* http://localhost:8080/rest-http/services/employee/1/search with 1 occurrences
* http://localhost:8080/shutdown with 1 occurrences
* http://localhost:8080/sockjs.js with 2 occurrences
* http://localhost:8080/stomp.js with 1 occurrences
* http://localhost:8080/time with 1 occurrences
* http://localhost:8080/ws-inbound-gateway/echoservice with 2 occurrences
* http://localhost:8082 with 1 occurrences
* http://schemas.xmlsoap.org/soap/envelope/ with 1 occurrences
* http://tiles.apache.org/tags-tiles with 1 occurrences
* http://www.example.org/orders with 3 occurrences
* http://www.example.org/orders-bigbooks with 2 occurrences
* http://www.springframework.org/spring-ws/samples/echo with 5 occurrences
* http://www.springframework.org/tags with 34 occurrences
* http://www.springframework.org/tags/form with 18 occurrences
* http://www.w3.org/1999/XSL/Transform with 1 occurrences
2019-03-22 15:59:21 -04:00

252 lines
8.2 KiB
Markdown

Spring Integration - Stored Procedure Example - Oracle
======================================================
## Overview
This sample application illustrates the usage of the *Spring Integration* Stored Procedure components using an Oracle™ database as a backend.
Actually 2 samples are provided:
* **Sample 1** Capitalizes Strings
* **Sample 2** Retrieves Coffee Data
- This is sample is similar to the [Stored Procedure Sample for PostgreSql][]
## Running the Sample
### Pre-requisites
This sample was tested against: **Oracle Database Express Edition 11g Release 2** (which can be downloaded and used for free).
Nevertheless, the example should work with other versions as well.
- Access to a Oracle or Oracle XE database instance
- Install Oracle JDBC Driver to your local Maven repository (~/.m2)
### JDBC Driver Installation for Oracle
- Go to [https://www.oracle.com/technetwork/indexes/downloads/index.html](https://www.oracle.com/technetwork/indexes/downloads/index.html)
- Under "JDBC Drivers", download the appropriate driver relevant to your Oracle and JDK version (This sample was tested using "Oracle Database 11g Release 2 JDBC Drivers")
- Once downloaded, install the driver to your local Maven repository:
$ mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=~/dev/ojdbc6.jar -DgeneratePom=true
- Now you can uncomment the `ojdbc6` dependency in the build.gradle file for `stored-procedures-oracle` project.
After that you can run the sample application using [Gradle Application Plugin](https://www.gradle.org/docs/current/userguide/application_plugin.html):
$ gradlew :stored-procedures-oracle:run
### Common Oracle Setup
#### Create Tablespace
```SQL
CREATE TABLESPACE procedure_test
DATAFILE 'c:/data/procedure_test.dbf'
SIZE 10M
AUTOEXTEND ON NEXT 10M
MAXSIZE 100M;
```
#### Create User
```SQL
CREATE USER storedproc
IDENTIFIED BY storedproc
DEFAULT TABLESPACE procedure_test
TEMPORARY TABLESPACE temp;
```
#### Grant Rights
```SQL
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO storedproc;
ALTER USER storedproc QUOTA unlimited ON procedure_test;
```
### Setting up the Spring Application Context
You may have to update the Oracle DB properties in:
/src/main/resources/META-INF/spring/integration/spring-integration-context.xml
```XML
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="connectionCachingEnabled" value="true" />
<property name="URL" value="jdbc:oracle:thin:@//localhost:1521/XE" />
<property name="password" value="storedproc" />
<property name="user" value="storedproc" />
<property name="connectionCacheProperties">
<props merge="default">
<prop key="MinLimit">3</prop>
<prop key="MaxLimit">20</prop>
</props>
</property>
</bean>
```
## Running Sample 1 - Capitalizes Strings
This example provides a simple example using the stored procedure outbound gateway
adapter. This example will call an Oracle Stored Procedure as well as an Oracle Function using the StoredProc Outbound Gateway.
### Creating the Stored Procedure
```SQL
create or replace
PROCEDURE CAPITALIZE_STRING(inoutString IN OUT VARCHAR) IS
BEGIN
SELECT upper(inoutString) INTO inoutString from dual ;
END;
```
### Creating the Stored Function
```SQL
create or replace
FUNCTION GET_COOL_NUMBER
RETURN NUMBER
IS cool_number NUMBER(11,2);
BEGIN
cool_number := 12345;
RETURN cool_number;
END;
```
### Execute the Sample
* running the "Main" class from within STS (Right-click on Main class --> Run As --> Java Application)
* or from the command line:
$ gradlew :stored-procedures-oracle:run
You should see the following output:
16:05:19.556 INFO [main][org.springframework.integration.samples.storedprocedure.Main]
=========================================================
Welcome to Spring Integration's
Stored Procedure/Function Sample for Oracle
For more information please visit:
https://www.springsource.org/spring-integration
=========================================================
Please enter a choice and press <enter>:
1. Execute Sample 1 (Capitalize String)
2. Execute Sample 2 (Coffee Service)
q. Quit the application
Select **Opion 1**.
=========================================================
Please press 'q + Enter' to quit the application.
=========================================================
Please enter a string and press <enter>: hello world
Converting String to Uppcase using Stored Procedure...
Retrieving Numeric value via Sql Function...
Converted 'hello world' - End Result: 'HELLO WORLD_12345'.
When you enter a text, the text will be converted into upper-case using the Oracle Stored Procedure named `CAPITALIZE_STRING`. Afterwards, the String is concatenated with the result from calling the Oracle Stored Function `GET_COOL_NUMBER`.
## Running Sample 2 - Coffee Service
### Create Table COFFEE_BEVERAGES
```SQL
CREATE TABLE "COFFEE_BEVERAGES"(
"ID" NUMBER(10,0) NOT NULL,
"COFFEE_NAME" VARCHAR2(50 CHAR) NOT NULL,
"COFFEE_DESCRIPTION" VARCHAR2(500 CHAR) NOT NULL,
CONSTRAINT "COFFEE_BEVERAGES_PK" PRIMARY KEY ("ID"));
```
### Add Sample Data to Table COFFEE_BEVERAGES
```SQL
REM INSERTING into COFFEE_BEVERAGES
SET DEFINE OFF;
Insert into COFFEE_BEVERAGES (ID,COFFEE_NAME,COFFEE_DESCRIPTION) values (1,'Espresso','Espressos keep developers going in the morning. There are never enough of them.');
Insert into COFFEE_BEVERAGES (ID,COFFEE_NAME,COFFEE_DESCRIPTION) values (2,'Cappuccino','For the finer moments. Wrap your espresso in a tasty layer of foam.');
Insert into COFFEE_BEVERAGES (ID,COFFEE_NAME,COFFEE_DESCRIPTION) values (3,'Mocha','Mmmmh, chocolate.');
Insert into COFFEE_BEVERAGES (ID,COFFEE_NAME,COFFEE_DESCRIPTION) values (4,'Latte','If you are more into milk than into foam.');
```
### Creating the Stored Functions
Please create the following Stored Functions:
#### Find All Coffee Beverages
```SQL
create or replace
package types
as
type cursorType is ref cursor;
end;
```
```SQL
create or replace
FUNCTION find_all_coffee_beverages return types.cursortype
AS
l_cursor types.cursorType;
BEGIN
OPEN l_cursor FOR SELECT "ID", "COFFEE_NAME", "COFFEE_DESCRIPTION" FROM "COFFEE_BEVERAGES";
RETURN l_cursor;
END;
```
#### Find Specific Coffee Beverage
```SQL
create or replace
FUNCTION find_coffee(coffee_id IN integer)
RETURN VARCHAR2 is description VARCHAR2(1000);
begin
SELECT COFFEE_DESCRIPTION into description from COFFEE_BEVERAGES where ID=coffee_id;
return description;
end;
```
### Execute the Sample
* running the "Main" class from within STS (Right-click on Main class --> Run As --> Java Application)
* or from the command line:
$ gradlew :stored-procedures-oracle:run
You should see the following output:
16:05:19.556 INFO [main][org.springframework.integration.samples.storedprocedure.Main]
=========================================================
Welcome to Spring Integration's
Stored Procedure/Function Sample for Oracle
For more information please visit:
https://www.springsource.org/spring-integration
=========================================================
Please enter a choice and press <enter>:
1. Execute Sample 1 (Capitalize String)
2. Execute Sample 2 (Coffee Service)
q. Quit the application
Select **Opion 2**.
This should result in the following output:
* Please enter 'list' and press <enter> to get a list of coffees.
* Enter a coffee id, e.g. '1' and press <enter> to get a description.
* Please press 'q + Enter' to quit the application.
This sample also periodically polls the Oracle database using a **Stored Procedure Inbound Channel Adapter**:
16:06:46.669 INFO [task-scheduler-1][org.springframework.integration.handler.LoggingHandler] [Payload=[CoffeeBeverage [id=1,...
--------------------------------------------------------------------------------
For help please take a look at the Spring Integration documentation:
https://www.springsource.org/spring-integration
[Stored Procedure Sample for PostgreSql]: https://github.com/ghillert/spring-integration-samples/tree/master/intermediate/stored-procedures-postgresql