beta_tools 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. data/.gitignore +11 -0
  2. data/Capfile +2 -0
  3. data/Gemfile +4 -0
  4. data/README +7 -0
  5. data/Rakefile +7 -0
  6. data/beta_tools.gemspec +31 -0
  7. data/bin/deploy +9 -0
  8. data/bin/documentation_daemon +12 -0
  9. data/bin/loginToUrl +6 -0
  10. data/bin/onVpn +6 -0
  11. data/bin/pub +91 -0
  12. data/bin/query_solr +11 -0
  13. data/bin/solrWebApp +6 -0
  14. data/conf/schema.xml +220 -0
  15. data/config/deploy.rb +44 -0
  16. data/config.ru +2 -0
  17. data/docs/#next_design.mmd# +0 -0
  18. data/features/deploy.feature +9 -0
  19. data/features/git.feature +15 -0
  20. data/features/maven.feature +21 -0
  21. data/features/step_definitions/deploy_steps.rb +11 -0
  22. data/features/step_definitions/git_steps.rb +20 -0
  23. data/features/step_definitions/maven_steps.rb +35 -0
  24. data/features/support/env.rb +8 -0
  25. data/int/it_tools/suite_it_tools.rb +2 -0
  26. data/int/it_tools/test_integ1.rb +17 -0
  27. data/lib/beta_tools/version.rb +3 -0
  28. data/lib/beta_tools.rb +5 -0
  29. data/lib/it_tools/calc.rb +14 -0
  30. data/lib/it_tools/config.ru +2 -0
  31. data/lib/it_tools/environment.rb +86 -0
  32. data/lib/it_tools/git.rb +3 -0
  33. data/lib/it_tools/html_publish.rb +287 -0
  34. data/lib/it_tools/mail.rb +21 -0
  35. data/lib/it_tools/maven.rb +101 -0
  36. data/lib/it_tools/md5.rb +4 -0
  37. data/lib/it_tools/multipart.rb +78 -0
  38. data/lib/it_tools/network_tools.rb +72 -0
  39. data/lib/it_tools/options.rb +46 -0
  40. data/lib/it_tools/pub_driver.rb +188 -0
  41. data/lib/it_tools/publisher2.rb +232 -0
  42. data/lib/it_tools/sample.rb +9 -0
  43. data/lib/it_tools/shared.rb +22 -0
  44. data/lib/it_tools/solr.rb +157 -0
  45. data/lib/it_tools/views/search_results.erb +16 -0
  46. data/log/thin.log +177 -0
  47. data/spec/it_tools/deploy_spec.rb +20 -0
  48. data/spec/spec_helper.rb +0 -0
  49. data/test/bin/test_pub.rb +30 -0
  50. data/test/cleaner.rb +6 -0
  51. data/test/driver.rb +24 -0
  52. data/test/integration/tp.rb +107 -0
  53. data/test/it_tools/for_debugger.rb +4 -0
  54. data/test/it_tools/publisher2.rb +13 -0
  55. data/test/it_tools/suite_it_tools.rb +6 -0
  56. data/test/it_tools/suite_it_tools.rb~ +13 -0
  57. data/test/it_tools/test_deploy.rb +83 -0
  58. data/test/it_tools/test_html_publish.rb +54 -0
  59. data/test/it_tools/test_maven.rb +31 -0
  60. data/test/it_tools/test_multipart.rb +31 -0
  61. data/test/it_tools/test_network_tools.rb +14 -0
  62. data/test/it_tools/test_publisher2.rb +42 -0
  63. data/test/it_tools/test_publisher2_support.rb +16 -0
  64. data/test/it_tools/test_sample.rb +10 -0
  65. data/test/it_tools/test_shared.rb +36 -0
  66. data/test/it_tools/test_solr.rb +22 -0
  67. data/test/it_tools/test_solr2.rb +22 -0
  68. data/testdata/assembly_pom.xml +157 -0
  69. data/testdata/desir.txt +39 -0
  70. data/testdata/ear_pom.xml +82 -0
  71. data/testdata/java.html +524 -0
  72. data/testdata/pom.xml +174 -0
  73. data/testdata/publish/src_dir/#arch.mmd# +0 -0
  74. data/testdata/publish/src_dir/ajax-loader.gif +0 -0
  75. data/testdata/publish/src_dir/file1.mmd +5 -0
  76. data/testdata/publish/src_dir/file2.mmd +3 -0
  77. data/testdata/publish/src_dir/file3.abc +0 -0
  78. data/testdata/publish/src_dir/file4.mmd +3 -0
  79. data/testdata/publish/src_dir/help.png +0 -0
  80. data/testdata/publish/src_dir/images/linux.jpeg +0 -0
  81. data/testdata/publish/src_dir/inputStyles.css +0 -0
  82. data/testdata/publish/src_dir/search.html +0 -0
  83. data/testdata/publish/src_dir/search.js +0 -0
  84. data/testdata/publish/target_dir/.@arch.html +0 -0
  85. data/testdata/publish/target_dir/file1.html +7 -0
  86. data/testdata/publish/target_dir/file2.html +5 -0
  87. data/testdata/publish/target_dir/search.js +0 -0
  88. data/testdata/publish/target_dir_static/.@arch.html +1 -0
  89. data/testdata/publish/target_dir_static/file1.html +7 -0
  90. data/testdata/publish/target_dir_static/index.html +1 -0
  91. data/testdata/publish/target_dir_static/style.css +61 -0
  92. data/testdata/ruby.mmd +404 -0
  93. data/testdata/simple.mmd +3 -0
  94. data/testdata/simple.xml +3 -0
  95. data/testdata/small.txt +2 -0
  96. data/testdata/utf8_chars.txt +1 -0
  97. metadata +338 -0
@@ -0,0 +1,524 @@
1
+ <head><link rel='stylesheet' type='text/css' href='style.css' /></head>
2
+ <body>
3
+
4
+ <div class="toc1"><a href="#Installation_Considerations">1 - Installation Considerations</a></div><br/>
5
+ <div class="toc1"><a href="#VisualVM">2 - VisualVM</a></div><br/>
6
+ <div class="toc1"><a href="#Logging">3 - Logging</a></div><br/>
7
+ <div class="toc2"><a href="#Tips:">3.1 - Tips:</a></div><br/>
8
+ <div class="toc2"><a href="#Error_Log_File">3.2 - Error Log File</a></div><br/>
9
+ <div class="toc1"><a href="#Application_Configuration">4 - Application Configuration</a></div><br/>
10
+ <div class="toc2"><a href="#External_Config">4.1 - External Config</a></div><br/>
11
+ <div class="toc2"><a href="#Resource_Files">4.2 - Resource Files</a></div><br/>
12
+ <div class="toc2"><a href="#Properties_File">4.3 - Properties File</a></div><br/>
13
+ <div class="toc2"><a href="#Load_from_classpath">4.4 - Load from classpath</a></div><br/>
14
+ <div class="toc2"><a href="#The_Best_Way">4.5 - The Best Way</a></div><br/>
15
+ <div class="toc1"><a href="#Loops">5 - Loops</a></div><br/>
16
+ <div class="toc2"><a href="#foreach">5.1 - foreach</a></div><br/>
17
+ <div class="toc3"><a href="#List">5.1.1 - List</a></div><br/>
18
+ <div class="toc3"><a href="#Map">5.1.2 - Map</a></div><br/>
19
+ <div class="toc2"><a href="#Control">5.2 - Control</a></div><br/>
20
+ <div class="toc3"><a href="#switch">5.2.1 - switch</a></div><br/>
21
+ <div class="toc1"><a href="#Misc">6 - Misc</a></div><br/>
22
+ <div class="toc2"><a href="#Class_Loaders">6.1 - Class Loaders</a></div><br/>
23
+ <div class="toc2"><a href="#Dates">6.2 - Dates</a></div><br/>
24
+ <div class="toc2"><a href="#Regex">6.3 - Regex</a></div><br/>
25
+ <div class="toc1"><a href="#XML_&amp;_Java">7 - XML &amp; Java</a></div><br/>
26
+ <div class="toc2"><a href="#Javadoc">7.1 - Javadoc</a></div><br/>
27
+ <div class="toc2"><a href="#Decompiling">7.2 - Decompiling</a></div><br/>
28
+ <div class="toc2"><a href="#Visual_VM">7.3 - Visual VM</a></div><br/>
29
+ <p><a href="../../index.html">home</a> &gt; <a href="../index.html">training</a> &gt; Java</p>
30
+
31
+ <p>Table of Contents</p>
32
+
33
+ <p>{toc}</p>
34
+
35
+ <h1 id="Installation_Considerations">1 - Installation Considerations</h1>
36
+
37
+ <p><img src="/images/mac.jpeg" alt="image"></p>
38
+
39
+ <p>Mac JVMs are installed to here:
40
+ <code>/System/Library/Frameworks/JavaVM.framework/Versions</code></p>
41
+
42
+ <h1 id="VisualVM">2 - VisualVM</h1>
43
+
44
+ <p>To see the memory profile of a running java process…can use
45
+ VisualVM.</p>
46
+
47
+ <h1 id="Logging">3 - Logging</h1>
48
+
49
+ <p><a href="http://logback.qos.ch/manual/layouts.html">Reference</a></p>
50
+
51
+ <p>Maven pom.xml</p>
52
+ <div class="highlight"><pre><span class="nt">&lt;dependency&gt;</span>
53
+ <span class="nt">&lt;groupId&gt;</span>org.slf4j<span class="nt">&lt;/groupId&gt;</span>
54
+ <span class="nt">&lt;artifactId&gt;</span>slf4j-api<span class="nt">&lt;/artifactId&gt;</span>
55
+ <span class="nt">&lt;version&gt;</span>1.6.1<span class="nt">&lt;/version&gt;</span>
56
+ <span class="nt">&lt;/dependency&gt;</span>
57
+ <span class="nt">&lt;dependency&gt;</span>
58
+ <span class="nt">&lt;groupId&gt;</span>ch.qos.logback<span class="nt">&lt;/groupId&gt;</span>
59
+ <span class="nt">&lt;artifactId&gt;</span>logback-classic<span class="nt">&lt;/artifactId&gt;</span>
60
+ <span class="nt">&lt;version&gt;</span>0.9.28<span class="nt">&lt;/version&gt;</span>
61
+ <span class="nt">&lt;/dependency&gt;</span>
62
+
63
+ import org.slf4j.Logger;
64
+ import org.slf4j.LoggerFactory;
65
+ static final Logger log = LoggerFactory.getLogger(ServiceProxy.class);
66
+ log.debug(&quot;After transformation params:\n{}&quot;, afterTransformation);
67
+ </pre>
68
+ </div>
69
+
70
+ <p>Dir layout:</p>
71
+ <div class="highlight"><pre><span class="p">.</span>
72
+ `<span class="o">--</span> <span class="n">src</span>
73
+ <span class="o">|--</span> <span class="n">main</span>
74
+ <span class="o">|</span> `<span class="o">--</span> <span class="n">resources</span>
75
+ <span class="o">|</span> `<span class="o">--</span> <span class="n">logback</span><span class="p">.</span><span class="n">xml</span>
76
+ `<span class="o">--</span> <span class="nb">test</span>
77
+ `<span class="o">--</span> <span class="n">resources</span>
78
+ `<span class="o">--</span> <span class="n">logback</span><span class="o">-</span><span class="nb">test</span><span class="p">.</span><span class="n">xml</span>
79
+ </pre>
80
+ </div>
81
+
82
+ <p>Ensure src/test/resources is a source folder in eclipse</p>
83
+
84
+ <p>Config files: logback.xml: You use this for production. Notice
85
+ there<br>
86
+ is an added Date to the Timestamp.</p>
87
+ <div class="highlight"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
88
+ <span class="nt">&lt;configuration&gt;</span>
89
+ <span class="nt">&lt;appender</span> <span class="na">name=</span><span class="s">&quot;STDOUT&quot;</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.core.ConsoleAppender&quot;</span><span class="nt">&gt;</span>
90
+ <span class="nt">&lt;layout</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.classic.PatternLayout&quot;</span><span class="nt">&gt;</span>
91
+ <span class="nt">&lt;Pattern&gt;</span>%date{MMM dd yy ;HH:mm:ss} [%thread] %-5level %logger{36}:%line - %msg%n<span class="nt">&lt;/Pattern&gt;</span>
92
+ <span class="nt">&lt;/layout&gt;</span>
93
+ <span class="nt">&lt;/appender&gt;</span>
94
+ <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">&quot;com.base22&quot;</span> <span class="na">level=</span><span class="s">&quot;TRACE&quot;</span><span class="nt">/&gt;</span>
95
+ <span class="nt">&lt;root</span> <span class="na">level=</span><span class="s">&quot;debug&quot;</span><span class="nt">&gt;</span>
96
+ <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">&quot;STDOUT&quot;</span> <span class="nt">/&gt;</span>
97
+ <span class="nt">&lt;/root&gt;</span>
98
+ <span class="nt">&lt;/configuration&gt;</span>
99
+ </pre>
100
+ </div>
101
+
102
+ <p>Config files: logback-test.xml:</p>
103
+ <div class="highlight"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
104
+ <span class="nt">&lt;configuration&gt;</span>
105
+ <span class="nt">&lt;appender</span> <span class="na">name=</span><span class="s">&quot;STDOUT&quot;</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.core.ConsoleAppender&quot;</span><span class="nt">&gt;</span>
106
+ <span class="nt">&lt;layout</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.classic.PatternLayout&quot;</span><span class="nt">&gt;</span>
107
+ <span class="nt">&lt;Pattern&gt;</span>%-5level %logger{100} - %msg%n<span class="nt">&lt;/Pattern&gt;</span>
108
+ <span class="nt">&lt;/layout&gt;</span>
109
+ <span class="nt">&lt;/appender&gt;</span>
110
+ <span class="nt">&lt;logger</span> <span class="na">name=</span><span class="s">&quot;com.oracle.git.ngsp.crmodRestServer.hasExternDep&quot;</span> <span class="na">level=</span><span class="s">&quot;DEBUG&quot;</span><span class="nt">/&gt;</span>
111
+ <span class="nt">&lt;root</span> <span class="na">level=</span><span class="s">&quot;debug&quot;</span><span class="nt">&gt;</span>
112
+ <span class="nt">&lt;appender-ref</span> <span class="na">ref=</span><span class="s">&quot;STDOUT&quot;</span><span class="nt">/&gt;</span>
113
+ <span class="nt">&lt;/root&gt;</span>
114
+ <span class="nt">&lt;/configuration&gt;</span>
115
+ </pre>
116
+ </div>
117
+
118
+ <h2 id="Tips:">3.1 - Tips:</h2>
119
+
120
+ <p>More than 2 object in one line:</p>
121
+
122
+ <p>If three or more arguments need to be passed, an Object[] variant
123
+ is also availalble. For example, you can write:</p>
124
+ <div class="highlight"><pre><span class="n">Object</span><span class="p">[]</span> <span class="n">paramArray</span> <span class="p">=</span> <span class="p">{</span><span class="n">newVal</span><span class="p">,</span> <span class="n">below</span><span class="p">,</span> <span class="n">above</span><span class="p">};</span>
125
+ <span class="n">logger</span><span class="p">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Value {} was inserted between {} and {}.&quot;</span><span class="p">,</span> <span class="n">paramArray</span><span class="p">);</span>
126
+ </pre>
127
+ </div>
128
+
129
+ <h2 id="Error_Log_File">3.2 - Error Log File</h2>
130
+ <div class="highlight"><pre> <span class="nt">&lt;appender</span> <span class="na">name=</span><span class="s">&quot;ERROR-LOG&quot;</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.core.FileAppender&quot;</span><span class="nt">&gt;</span>
131
+ <span class="nt">&lt;file&gt;</span>logs/HRMS-CRMOD-DataIntegration-ERRORS.log<span class="nt">&lt;/file&gt;</span>
132
+ <span class="nt">&lt;append&gt;</span>true<span class="nt">&lt;/append&gt;</span>
133
+ <span class="nt">&lt;encoder&gt;</span>
134
+ <span class="nt">&lt;pattern&gt;</span>%-5level %date{MMM dd yy ;HH:mm:ss} %msg \(%logger{0}.java:%line\)%n<span class="nt">&lt;/pattern&gt;</span>
135
+ <span class="nt">&lt;/encoder&gt;</span>
136
+ <span class="nt">&lt;filter</span> <span class="na">class=</span><span class="s">&quot;ch.qos.logback.classic.filter.ThresholdFilter&quot;</span><span class="nt">&gt;</span>
137
+ <span class="nt">&lt;level&gt;</span>ERROR<span class="nt">&lt;/level&gt;</span>
138
+ <span class="nt">&lt;/filter&gt;</span>
139
+ <span class="nt">&lt;/appender&gt;</span>
140
+ <span class="nt">&lt;root</span> <span class="na">level=</span><span class="s">&quot;</span><span class="cp">${</span><span class="n">log</span><span class="o">.</span><span class="n">level</span><span class="cp">}</span><span class="s">&quot;</span><span class="nt">&gt;</span>
141
+ <span class="nt">&lt;appender</span><span class="err">-ref</span> <span class="na">ref=</span><span class="s">&quot;STDOUT&quot;</span> <span class="nt">/&gt;</span>
142
+ <span class="nt">&lt;appender</span><span class="err">-ref</span> <span class="na">ref=</span><span class="s">&quot;FILE&quot;</span> <span class="nt">/&gt;</span>
143
+ <span class="nt">&lt;appender</span><span class="err">-ref</span> <span class="na">ref=</span><span class="s">&quot;ERROR-LOG&quot;</span> <span class="nt">/&gt;</span>
144
+ <span class="nt">&lt;/root&gt;</span>
145
+ </pre>
146
+ </div>
147
+
148
+ <h1 id="Application_Configuration">4 - Application Configuration</h1>
149
+
150
+ <h2 id="External_Config">4.1 - External Config</h2>
151
+
152
+ <p>There may be information that is specific to the environment you
153
+ are<br>
154
+ deploying your web applications to. Like database URL, username,<br>
155
+ password. Use the following Spring formula to deal with this.</p>
156
+
157
+ <p>in: <code>src/main/resources/applicationContext.xml</code> put:</p>
158
+ <div class="highlight"><pre><span class="nt">&lt;beans</span> <span class="na">xmlns=</span><span class="s">&quot;http://www.springframework.org/schema/beans&quot;</span> <span class="na">xmlns:xsi=</span><span class="s">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span class="na">xmlns:context=</span><span class="s">&quot;http://www.springframework.org/schema/context&quot;</span>
159
+ <span class="na">xsi:schemaLocation=</span><span class="s">&quot;</span>
160
+ <span class="s">http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</span>
161
+ <span class="s">http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd&quot;</span><span class="nt">&gt;</span>
162
+ <span class="nt">&lt;context:property</span><span class="err">-placeholder</span> <span class="na">location=</span><span class="s">&quot;file:</span><span class="cp">${</span><span class="n">user</span><span class="o">.</span><span class="n">dir</span><span class="cp">}</span><span class="s">/application.properties&quot;</span> <span class="nt">/&gt;</span>
163
+ <span class="nt">&lt;bean</span> <span class="na">id=</span><span class="s">&quot;crmodServer&quot;</span> <span class="na">class=</span><span class="s">&quot;com.oracle.git.ngsp.crmodRestServer.isExternDep.CrmodServer&quot;</span><span class="nt">&gt;</span>
164
+ <span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">&quot;companyId&quot;</span> <span class="na">value=</span><span class="s">&quot;</span><span class="cp">${</span><span class="n">crmod</span><span class="o">.</span><span class="n">companyId</span><span class="cp">}</span><span class="s">&quot;</span> <span class="nt">/&gt;</span>
165
+ <span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">&quot;serverUrl&quot;</span> <span class="na">value=</span><span class="s">&quot;</span><span class="cp">${</span><span class="n">crmod</span><span class="o">.</span><span class="n">password</span><span class="cp">}</span><span class="s">&quot;</span> <span class="nt">/&gt;</span>
166
+ <span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">&quot;username&quot;</span> <span class="na">value=</span><span class="s">&quot;</span><span class="cp">${</span><span class="n">crmod</span><span class="o">.</span><span class="n">username</span><span class="cp">}</span><span class="s">&quot;</span> <span class="nt">/&gt;</span>
167
+ <span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">&quot;password&quot;</span> <span class="na">value=</span><span class="s">&quot;</span><span class="cp">${</span><span class="n">crmod</span><span class="o">.</span><span class="n">serverUrl</span><span class="cp">}</span><span class="s">&quot;</span> <span class="nt">/&gt;</span>
168
+ <span class="nt">&lt;/bean&gt;</span>
169
+ <span class="nt">&lt;/beans&gt;</span>
170
+ </pre>
171
+ </div>
172
+
173
+ <p>have a file called: <code>application.properties</code> with the following<br>
174
+ contents:</p>
175
+ <div class="highlight"><pre><span class="n">crmod</span><span class="p">.</span><span class="n">companyId</span><span class="p">=</span><span class="n">ONGS</span>
176
+ <span class="n">crmod</span><span class="p">.</span><span class="n">password</span><span class="p">=</span><span class="n">mySecretPassword</span>
177
+ <span class="n">crmod</span><span class="p">.</span><span class="n">username</span><span class="p">=</span><span class="n">ftravers</span>
178
+ <span class="n">crmod</span><span class="p">.</span><span class="n">serverUrl</span><span class="p">=</span><span class="n">secure</span><span class="o">-</span><span class="n">ausomxfca</span><span class="p">.</span><span class="n">crmondemand</span><span class="p">.</span><span class="n">com</span>
179
+ </pre>
180
+ </div>
181
+
182
+ <p>ensure class:<br>
183
+ <code>com.oracle.git.ngsp.crmodRestServer.isExternDep.CrmodServer</code></p>
184
+
185
+ <p>has appropriate properties/getters/setters to be a bean:</p>
186
+ <div class="highlight"><pre><span class="n">private</span> <span class="n">String</span> <span class="n">companyId</span><span class="p">;</span>
187
+ <span class="n">public</span> <span class="n">String</span> <span class="n">getCompanyId</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">companyId</span><span class="p">;</span> <span class="p">}</span>
188
+ <span class="n">public</span> <span class="n">void</span> <span class="n">setCompanyId</span><span class="p">(</span><span class="n">String</span> <span class="n">companyId</span><span class="p">)</span> <span class="p">{</span> <span class="n">this</span><span class="p">.</span><span class="n">companyId</span> <span class="p">=</span> <span class="n">companyId</span><span class="p">;</span> <span class="p">}</span>
189
+ </pre>
190
+ </div>
191
+
192
+ <h2 id="Resource_Files">4.2 - Resource Files</h2>
193
+
194
+ <p>These are okay if you want hard package a properties file with your
195
+ jar. However, if you want the end user to configure your
196
+ application then you should use a properties file like the next
197
+ section recommends.</p>
198
+ <div class="highlight"><pre><span class="n">ResourceBundle</span> <span class="n">props</span> <span class="o">=</span> <span class="n">ResourceBundle</span><span class="o">.</span><span class="na">getBundle</span> <span class="o">(</span><span class="s">&quot;some.pkg.resource&quot;</span><span class="o">);</span>
199
+ <span class="n">String</span> <span class="n">host</span> <span class="o">=</span> <span class="n">props</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">&quot;host&quot;</span><span class="o">);</span>
200
+ <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;This is the host: &quot;</span> <span class="o">+</span> <span class="n">host</span><span class="o">);</span>
201
+ </pre>
202
+ </div>
203
+
204
+ <p>in this case you’d have a file called <code>resource.properties</code> located
205
+ in the <code>some.pkg</code> package.</p>
206
+
207
+ <p>In the above scenario this would be located at:
208
+ <code>some/pkg/resource.properties</code>. Then you’d jar up your sources,
209
+ including the resource.properties file and your code would still
210
+ work when deployed in different scenarios…however it is very
211
+ difficult for the end user to modify…since they don’t have a simple
212
+ text file separate from your jar in which to place settings. In
213
+ that scenario use a property file as described next.</p>
214
+
215
+ <h2 id="Properties_File">4.3 - Properties File</h2>
216
+ <div class="highlight"><pre><span class="n">Properties</span> <span class="k">properties</span> <span class="p">=</span> <span class="n">new</span> <span class="n">Properties</span><span class="p">();</span>
217
+ <span class="n">String</span> <span class="n">filename</span> <span class="p">=</span> <span class="s">&quot;application.properties&quot;</span><span class="p">;</span>
218
+ <span class="n">File</span> <span class="n">file</span> <span class="p">=</span> <span class="n">new</span> <span class="n">File</span><span class="p">(</span><span class="n">filename</span><span class="p">);</span>
219
+ <span class="k">properties</span><span class="p">.</span><span class="nb">load</span><span class="p">(</span><span class="n">new</span> <span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">));</span>
220
+ </pre>
221
+ </div>
222
+
223
+ <h2 id="Load_from_classpath">4.4 - Load from classpath</h2>
224
+
225
+ <p>Load an arbitrary file from the classpath. I.e. it gets compiled
226
+ into<br>
227
+ the jar…so not good for settings that will only be changed after<br>
228
+ deployment. Drop <code>myfile.txt</code> in the root of your classpath…or<br>
229
+ elsewhere (but then put a path in front such as:<br>
230
+ <code>/com/oracle/myfile.txt</code>.</p>
231
+ <div class="highlight"><pre><span class="n">InputStream</span> <span class="n">stream</span> <span class="p">=</span> <span class="n">this</span><span class="p">.</span><span class="n">getClass</span><span class="p">().</span><span class="n">getClassLoader</span><span class="p">().</span><span class="n">getResourceAsStream</span><span class="p">(</span><span class="s">&quot;myfile.txt&quot;</span><span class="p">);</span>
232
+ </pre>
233
+ </div>
234
+
235
+ <h2 id="The_Best_Way">4.5 - The Best Way</h2>
236
+
237
+ <p>The following loads a properties file (not resource file) from the
238
+ root of the classpath….without it needing to be compiled into the
239
+ jar.</p>
240
+
241
+ <p>Sometimes you want to find out what file it did find…you can use:</p>
242
+
243
+ <h1 id="Loops">5 - Loops</h1>
244
+
245
+ <h2 id="foreach">5.1 - foreach</h2>
246
+
247
+ <h3 id="List">5.1.1 - List</h3>
248
+ <div class="highlight"><pre><span class="n">List</span> <span class="n">listToLoopOver</span> <span class="p">=</span> <span class="n">new</span> <span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
249
+ <span class="n">listToLoopOver</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="s">&quot;a&quot;</span><span class="p">);</span> <span class="n">listToLoopOver</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="s">&quot;b&quot;</span><span class="p">);</span>
250
+ <span class="k">for</span> <span class="p">(</span><span class="n">String</span> <span class="n">currString</span> <span class="p">:</span> <span class="n">listToLoopOver</span><span class="p">)</span>
251
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">currString</span><span class="p">);</span>
252
+ </pre>
253
+ </div>
254
+
255
+ <h3 id="Map">5.1.2 - Map</h3>
256
+ <div class="highlight"><pre><span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="n">String</span><span class="o">&gt;</span> <span class="n">contactList</span> <span class="p">=</span> <span class="n">new</span> <span class="n">HashMap</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
257
+ <span class="n">contactList</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&quot;Fenton&quot;</span><span class="p">,</span> <span class="s">&quot;fenton@gmail.com&quot;</span><span class="p">);</span> <span class="n">contactList</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="s">&quot;joe&quot;</span><span class="p">,</span> <span class="s">&quot;joe@gmail.com&quot;</span><span class="p">);</span>
258
+ <span class="k">for</span><span class="p">(</span><span class="n">Map</span><span class="p">.</span><span class="n">Entry</span><span class="o">&lt;</span><span class="n">K</span><span class="p">,</span> <span class="n">V</span><span class="o">&gt;</span> <span class="nb">e</span> <span class="p">:</span> <span class="n">map</span><span class="p">.</span><span class="n">entrySet</span><span class="p">())</span>
259
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="nb">e</span><span class="p">.</span><span class="n">getKey</span><span class="p">()</span><span class="o">+</span><span class="s">&quot;: &quot;</span><span class="o">+</span><span class="nb">e</span><span class="p">.</span><span class="n">getValue</span><span class="p">());</span>
260
+ </pre>
261
+ </div>
262
+
263
+ <h2 id="Control">5.2 - Control</h2>
264
+
265
+ <h3 id="switch">5.2.1 - switch</h3>
266
+ <div class="highlight"><pre><span class="n">int</span> <span class="n">month</span> <span class="p">=</span> 8<span class="p">;</span>
267
+ <span class="k">switch</span> <span class="p">(</span><span class="n">month</span><span class="p">)</span> <span class="p">{</span>
268
+ <span class="k">case</span> 1<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;January&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
269
+ <span class="k">case</span> 2<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;February&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
270
+ <span class="k">case</span> 3<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;March&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
271
+ <span class="k">case</span> 4<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;April&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
272
+ <span class="k">case</span> 5<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;May&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
273
+ <span class="k">case</span> 6<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;June&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
274
+ <span class="k">case</span> 7<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;July&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
275
+ <span class="k">case</span> 8<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;August&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
276
+ <span class="k">case</span> 9<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;September&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
277
+ <span class="k">case</span> 10<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;October&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
278
+ <span class="k">case</span> 11<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;November&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
279
+ <span class="k">case</span> 12<span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;December&quot;</span><span class="p">);</span> <span class="k">break</span><span class="p">;</span>
280
+ <span class="n">default</span><span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Invalid month.&quot;</span><span class="p">);</span><span class="k">break</span><span class="p">;</span>
281
+ <span class="p">}</span>
282
+ </pre>
283
+ </div>
284
+
285
+ <h1 id="Misc">6 - Misc</h1>
286
+
287
+ <h2 id="Class_Loaders">6.1 - Class Loaders</h2>
288
+ <div class="highlight"><pre> <span class="n">URL</span><span class="p">[]</span> <span class="n">urls</span> <span class="p">=</span> <span class="p">((</span><span class="n">URLClassLoader</span><span class="p">)</span> <span class="n">ClassLoader</span><span class="p">.</span><span class="n">getSystemClassLoader</span><span class="p">()).</span><span class="n">getURLs</span><span class="p">();</span>
289
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="n">urls</span><span class="p">);</span>
290
+ </pre>
291
+ </div>
292
+
293
+ <h2 id="Dates">6.2 - Dates</h2>
294
+
295
+ <p><a href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html">Date Reference</a></p>
296
+
297
+ <p>Convert String → Date</p>
298
+ <div class="highlight"><pre><span class="n">String</span> <span class="n">startDate</span> <span class="p">=</span> <span class="s">&quot;2004-03-19&quot;</span><span class="p">;</span>
299
+ <span class="n">DateFormat</span> <span class="n">df</span> <span class="p">=</span> <span class="n">new</span> <span class="n">SimpleDateFormat</span><span class="p">(</span><span class="s">&quot;yyyy-MM-dd&quot;</span><span class="p">);</span>
300
+ <span class="n">Date</span> <span class="nb">date</span> <span class="p">=</span> <span class="n">df</span><span class="p">.</span><span class="n">parse</span><span class="p">(</span><span class="n">startDate</span><span class="p">);</span>
301
+ </pre>
302
+ </div>
303
+
304
+ <p>Convert Date → String</p>
305
+ <div class="highlight"><pre><span class="n">Date</span> <span class="n">todaysDate</span> <span class="p">=</span> <span class="n">new</span> <span class="n">java</span><span class="p">.</span><span class="n">util</span><span class="p">.</span><span class="n">Date</span><span class="p">();</span>
306
+ <span class="n">SimpleDateFormat</span> <span class="n">formatter</span> <span class="p">=</span> <span class="n">new</span> <span class="n">SimpleDateFormat</span><span class="p">(</span><span class="s">&quot;EEE MMM dd HH:mm:ss&quot;</span><span class="p">);</span>
307
+ <span class="n">String</span> <span class="n">formattedDate</span> <span class="p">=</span> <span class="n">formatter</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="n">todaysDate</span><span class="p">);</span>
308
+ </pre>
309
+ </div>
310
+
311
+ <h2 id="Regex">6.3 - Regex</h2>
312
+ <div class="highlight"><pre><span class="n">String</span> <span class="n">pattern</span> <span class="p">=</span> <span class="s">&quot;(^.+)(\\.[\\w]+$)&quot;</span><span class="p">;</span>
313
+ <span class="n">Pattern</span> <span class="n">r</span> <span class="p">=</span> <span class="n">Pattern</span><span class="p">.</span><span class="n">compile</span><span class="p">(</span><span class="n">pattern</span><span class="p">);</span>
314
+ <span class="n">Matcher</span> <span class="n">m</span> <span class="p">=</span> <span class="n">r</span><span class="p">.</span><span class="n">matcher</span><span class="p">(</span><span class="n">fullName</span><span class="p">);</span>
315
+ <span class="k">if</span> <span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="nb">find</span><span class="p">())</span> <span class="p">{</span>
316
+ <span class="n">String</span> <span class="n">pkgName</span> <span class="p">=</span> <span class="n">m</span><span class="p">.</span><span class="n">group</span><span class="p">(</span>1<span class="p">);</span>
317
+ <span class="k">return</span> <span class="n">pkgName</span><span class="p">;</span>
318
+ <span class="p">}</span>
319
+
320
+ <span class="n">String</span> <span class="n">aDate</span> <span class="p">=</span> <span class="s">&quot;date: 12-15-2003&quot;</span><span class="p">;</span>
321
+ <span class="n">Pattern</span> <span class="n">datePattern</span> <span class="p">=</span> <span class="n">Pattern</span><span class="p">.</span><span class="n">compile</span><span class="p">(</span><span class="s">&quot;date: (\\d{2})-(\\d{2})-(\\d{4})&quot;</span><span class="p">);</span>
322
+ <span class="n">Matcher</span> <span class="n">dateMatcher</span> <span class="p">=</span> <span class="n">datePattern</span><span class="p">.</span><span class="n">matcher</span><span class="p">(</span><span class="n">aDate</span><span class="p">);</span>
323
+ <span class="k">if</span> <span class="p">(</span><span class="n">dateMatcher</span><span class="p">.</span><span class="nb">find</span><span class="p">())</span>
324
+ <span class="p">{</span>
325
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Month is: &quot;</span> <span class="o">+</span> <span class="n">dateMatcher</span><span class="p">.</span><span class="n">group</span><span class="p">(</span>1<span class="p">));</span>
326
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Day is: &quot;</span> <span class="o">+</span> <span class="n">dateMatcher</span><span class="p">.</span><span class="n">group</span><span class="p">(</span>2<span class="p">));</span>
327
+ <span class="n">System</span><span class="p">.</span><span class="n">out</span><span class="p">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;Year is: &quot;</span> <span class="o">+</span> <span class="n">dateMatcher</span><span class="p">.</span><span class="n">group</span><span class="p">(</span>3<span class="p">));</span>
328
+ <span class="p">}</span>
329
+
330
+ <span class="o">//</span> <span class="n">jdbc</span><span class="p">:</span><span class="n">oracle</span><span class="p">:</span><span class="n">thin</span><span class="p">:</span><span class="n">dbl_ongs_crmod</span><span class="o">/</span><span class="n">abcd1234</span><span class="o">//</span><span class="n">dbsv1005</span><span class="p">.</span><span class="n">us</span><span class="p">.</span><span class="n">oracle</span><span class="p">.</span><span class="n">com</span><span class="p">:</span>1523<span class="o">/</span><span class="n">fapad</span><span class="p">.</span><span class="n">us</span><span class="p">.</span><span class="n">oracle</span><span class="p">.</span><span class="n">com</span>
331
+ <span class="k">static</span> <span class="n">String</span> <span class="n">removePassword</span><span class="p">(</span><span class="n">String</span> <span class="n">urlWithPassword</span><span class="p">)</span> <span class="p">{</span>
332
+ <span class="n">String</span> <span class="n">regex</span> <span class="p">=</span> <span class="s">&quot;/([^/]+)//&quot;</span><span class="p">;</span>
333
+ <span class="n">Pattern</span> <span class="n">p</span> <span class="p">=</span> <span class="n">Pattern</span><span class="p">.</span><span class="n">compile</span><span class="p">(</span><span class="n">regex</span><span class="p">);</span>
334
+ <span class="n">Matcher</span> <span class="n">m</span> <span class="p">=</span> <span class="n">p</span><span class="p">.</span><span class="n">matcher</span><span class="p">(</span><span class="n">urlWithPassword</span><span class="p">);</span>
335
+ <span class="k">if</span> <span class="p">(</span> <span class="n">m</span><span class="p">.</span><span class="nb">find</span><span class="p">()</span> <span class="p">)</span> <span class="p">{</span>
336
+ <span class="n">String</span> <span class="n">password</span> <span class="p">=</span> <span class="n">m</span><span class="p">.</span><span class="n">group</span><span class="p">(</span>1<span class="p">);</span>
337
+ <span class="n">String</span> <span class="n">blankedOutPassword</span> <span class="p">=</span> <span class="n">urlWithPassword</span><span class="p">.</span><span class="n">replaceFirst</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="s">&quot;XXXXXXXX&quot;</span><span class="p">);</span>
338
+ <span class="k">return</span> <span class="n">blankedOutPassword</span><span class="p">;</span>
339
+ <span class="p">}</span>
340
+ <span class="k">return</span> <span class="nb">null</span><span class="p">;</span>
341
+ <span class="p">}</span>
342
+ </pre>
343
+ </div>
344
+
345
+ <h1 id="XML_&amp;_Java">7 - XML &amp; Java</h1>
346
+
347
+ <p>Recommend using StAX (Streaming API for XML)</p>
348
+
349
+ <ul>
350
+ <li> reference: <a href="http://www.vogella.de/articles/JavaXML/article.html">http://www.vogella.de/articles/JavaXML/article.html</a></li>
351
+ </ul>
352
+
353
+ <p>Sample XML</p>
354
+ <div class="highlight"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
355
+ <span class="nt">&lt;SOAP-ENV:Envelope</span> <span class="na">xmlns:SOAP-ENV=</span><span class="s">&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;</span> <span class="na">xmlns:xsi=</span><span class="s">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span class="na">xmlns:xsd=</span><span class="s">&quot;http://www.w3.org/2001/XMLSchema&quot;</span><span class="nt">&gt;</span>
356
+ <span class="nt">&lt;SOAP-ENV:Body&gt;</span>
357
+ <span class="nt">&lt;ns:PicklistWS_GetPicklistValues_Output</span> <span class="na">xmlns:ns=</span><span class="s">&quot;urn:crmondemand/ws/picklist/&quot;</span><span class="nt">&gt;</span>
358
+ <span class="nt">&lt;ListOfParentPicklistValue</span> <span class="na">xmlns=</span><span class="s">&quot;urn:/crmondemand/xml/picklist&quot;</span><span class="nt">&gt;</span>
359
+ <span class="nt">&lt;ParentPicklistValue&gt;</span>
360
+ <span class="nt">&lt;Language&gt;</span>ENU<span class="nt">&lt;/Language&gt;</span>
361
+ <span class="nt">&lt;ParentFieldName/&gt;</span>
362
+ <span class="nt">&lt;ParentDisplayValue/&gt;</span>
363
+ <span class="nt">&lt;ParentCode/&gt;</span>
364
+ <span class="nt">&lt;Disabled/&gt;</span>
365
+ <span class="nt">&lt;ListOfPicklistValue&gt;</span>
366
+ <span class="nt">&lt;PicklistValue&gt;</span>
367
+ <span class="nt">&lt;Code&gt;</span>F<span class="nt">&lt;/Code&gt;</span>
368
+ <span class="nt">&lt;DisplayValue&gt;</span>F<span class="nt">&lt;/DisplayValue&gt;</span>
369
+ <span class="nt">&lt;Disabled&gt;</span>N<span class="nt">&lt;/Disabled&gt;</span>
370
+ <span class="nt">&lt;/PicklistValue&gt;</span>
371
+ <span class="nt">&lt;PicklistValue&gt;</span>
372
+ <span class="nt">&lt;Code&gt;</span>M<span class="nt">&lt;/Code&gt;</span>
373
+ <span class="nt">&lt;DisplayValue&gt;</span>M<span class="nt">&lt;/DisplayValue&gt;</span>
374
+ <span class="nt">&lt;Disabled&gt;</span>N<span class="nt">&lt;/Disabled&gt;</span>
375
+ <span class="nt">&lt;/PicklistValue&gt;</span>
376
+ <span class="nt">&lt;/ListOfPicklistValue&gt;</span>
377
+ <span class="nt">&lt;/ParentPicklistValue&gt;</span>
378
+ <span class="nt">&lt;/ListOfParentPicklistValue&gt;</span>
379
+ <span class="nt">&lt;/ns:PicklistWS_GetPicklistValues_Output&gt;</span>
380
+ <span class="nt">&lt;/SOAP-ENV:Body&gt;</span>
381
+ <span class="nt">&lt;/SOAP-ENV:Envelope&gt;</span>
382
+ </pre>
383
+ </div>
384
+
385
+ <p>Parsing Code:</p>
386
+ <div class="highlight"><pre> <span class="k">static</span> <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">getPicklistFromSoapResponse</span><span class="p">(</span><span class="n">String</span> <span class="n">soapResponse</span><span class="p">)</span> <span class="n">throws</span> <span class="n">ServiceException</span> <span class="p">{</span>
387
+ <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">values</span> <span class="p">=</span> <span class="n">new</span> <span class="n">LinkedHashMap</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">&gt;</span><span class="p">();</span>
388
+ <span class="n">XMLInputFactory</span> <span class="n">inputFactory</span> <span class="p">=</span> <span class="n">XMLInputFactory</span><span class="p">.</span><span class="n">newInstance</span><span class="p">();</span>
389
+ <span class="n">String</span> <span class="n">code</span> <span class="p">=</span> <span class="nb">null</span><span class="p">;</span>
390
+ <span class="n">String</span> <span class="nb">display</span> <span class="p">=</span> <span class="nb">null</span><span class="p">;</span>
391
+ <span class="n">String</span> <span class="n">disabled</span> <span class="p">=</span> <span class="nb">null</span><span class="p">;</span>
392
+ <span class="k">try</span> <span class="p">{</span>
393
+ <span class="n">InputStream</span> <span class="n">in</span> <span class="p">=</span> <span class="n">new</span> <span class="n">ByteArrayInputStream</span><span class="p">(</span><span class="n">soapResponse</span><span class="p">.</span><span class="n">getBytes</span><span class="p">(</span><span class="s">&quot;UTF-8&quot;</span><span class="p">));</span>
394
+ <span class="n">XMLEventReader</span> <span class="n">eventReader</span> <span class="p">=</span> <span class="n">inputFactory</span><span class="p">.</span><span class="n">createXMLEventReader</span><span class="p">(</span><span class="n">in</span><span class="p">);</span>
395
+ <span class="k">while</span> <span class="p">(</span><span class="n">eventReader</span><span class="p">.</span><span class="n">hasNext</span><span class="p">())</span> <span class="p">{</span>
396
+ <span class="n">XMLEvent</span> <span class="n">event</span> <span class="p">=</span> <span class="n">eventReader</span><span class="p">.</span><span class="n">nextEvent</span><span class="p">();</span>
397
+ <span class="k">if</span> <span class="p">(</span><span class="n">event</span><span class="p">.</span><span class="n">isStartElement</span><span class="p">())</span> <span class="p">{</span>
398
+ <span class="k">if</span> <span class="p">(</span><span class="n">event</span><span class="p">.</span><span class="n">asStartElement</span><span class="p">().</span><span class="n">getName</span><span class="p">().</span><span class="n">getLocalPart</span><span class="p">().</span><span class="n">equals</span><span class="p">(</span><span class="s">&quot;Code&quot;</span><span class="p">))</span> <span class="p">{</span>
399
+ <span class="n">event</span> <span class="p">=</span> <span class="n">eventReader</span><span class="p">.</span><span class="n">nextEvent</span><span class="p">();</span>
400
+ <span class="n">code</span> <span class="p">=</span> <span class="n">event</span><span class="p">.</span><span class="n">asCharacters</span><span class="p">().</span><span class="n">getData</span><span class="p">();</span>
401
+ <span class="k">continue</span><span class="p">;</span>
402
+ <span class="p">}</span>
403
+ <span class="k">if</span> <span class="p">(</span><span class="n">event</span><span class="p">.</span><span class="n">asStartElement</span><span class="p">().</span><span class="n">getName</span><span class="p">().</span><span class="n">getLocalPart</span><span class="p">().</span><span class="n">equals</span><span class="p">(</span><span class="s">&quot;DisplayValue&quot;</span><span class="p">))</span> <span class="p">{</span>
404
+ <span class="n">event</span> <span class="p">=</span> <span class="n">eventReader</span><span class="p">.</span><span class="n">nextEvent</span><span class="p">();</span>
405
+ <span class="nb">display</span> <span class="p">=</span> <span class="n">event</span><span class="p">.</span><span class="n">asCharacters</span><span class="p">().</span><span class="n">getData</span><span class="p">();</span>
406
+ <span class="k">continue</span><span class="p">;</span>
407
+ <span class="p">}</span>
408
+ <span class="k">if</span> <span class="p">(</span><span class="n">event</span><span class="p">.</span><span class="n">asStartElement</span><span class="p">().</span><span class="n">getName</span><span class="p">().</span><span class="n">getLocalPart</span><span class="p">().</span><span class="n">equals</span><span class="p">(</span><span class="s">&quot;Disabled&quot;</span><span class="p">))</span> <span class="p">{</span>
409
+ <span class="n">event</span> <span class="p">=</span> <span class="n">eventReader</span><span class="p">.</span><span class="n">nextEvent</span><span class="p">();</span>
410
+ <span class="n">disabled</span> <span class="p">=</span> <span class="n">event</span><span class="p">.</span><span class="n">asCharacters</span><span class="p">().</span><span class="n">getData</span><span class="p">();</span>
411
+ <span class="k">if</span> <span class="p">(</span> <span class="s">&quot;Y&quot;</span><span class="p">.</span><span class="n">equals</span><span class="p">(</span><span class="n">disabled</span><span class="p">))</span> <span class="n">values</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="nb">display</span><span class="p">);</span>
412
+ <span class="k">continue</span><span class="p">;</span>
413
+ <span class="p">}</span>
414
+ <span class="p">}</span>
415
+ <span class="p">}</span>
416
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">UnsupportedEncodingException</span> <span class="nb">e</span><span class="p">)</span> <span class="p">{</span>
417
+ <span class="n">throw</span> <span class="n">new</span> <span class="n">ServiceException</span><span class="p">(</span><span class="nb">e</span><span class="p">);</span>
418
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">XMLStreamException</span> <span class="nb">e</span><span class="p">)</span> <span class="p">{</span>
419
+ <span class="n">throw</span> <span class="n">new</span> <span class="n">ServiceException</span><span class="p">(</span><span class="nb">e</span><span class="p">);</span>
420
+ <span class="p">}</span>
421
+ <span class="k">return</span> <span class="n">values</span><span class="p">;</span>
422
+ <span class="p">}</span>
423
+ </pre>
424
+ </div>
425
+
426
+ <p>The line:</p>
427
+ <div class="highlight"><pre><span class="n">InputStream</span> <span class="n">in</span> <span class="p">=</span> <span class="n">new</span> <span class="n">ByteArrayInputStream</span><span class="p">(</span><span class="n">soapResponse</span><span class="p">.</span><span class="n">getBytes</span><span class="p">(</span><span class="s">&quot;UTF-8&quot;</span><span class="p">));</span>
428
+ </pre>
429
+ </div>
430
+
431
+ <p>can be switch for a file as the source of the xml with:</p>
432
+ <div class="highlight"><pre><span class="n">InputStream</span> <span class="n">in</span> <span class="p">=</span> <span class="n">new</span> <span class="n">FileInputStream</span><span class="p">(</span><span class="s">&quot;myFile.xml&quot;</span><span class="p">);</span>
433
+ </pre>
434
+ </div>
435
+
436
+ <p>While looping through the events, the first thing we need to do is
437
+ get the XMLEvent with <code>eventReader.nextEvent()</code>. Normally we only
438
+ care for events that are start elements, which is retrieved with
439
+ the line:</p>
440
+ <div class="highlight"><pre><span class="n">event</span><span class="p">.</span><span class="n">isStartElement</span><span class="p">()</span>
441
+ </pre>
442
+ </div>
443
+
444
+ <p>This checks to see if what we are looking at is an opening tag. For
445
+ example in: <code>&lt;name&gt;Fenton&lt;/name&gt;</code> only the <code>&lt;name&gt;</code> part is the
446
+ start element. So taking that snippet of xml, calling the
447
+ following</p>
448
+ <div class="highlight"><pre><span class="n">event</span><span class="p">.</span><span class="n">asStartElement</span><span class="p">().</span><span class="n">getName</span><span class="p">().</span><span class="n">getLocalPart</span><span class="p">()</span>
449
+ </pre>
450
+ </div>
451
+
452
+ <p>results in the string: <code>name</code>. To get the string <code>Fenton</code> we call:
453
+ <code>event.asCharacters().getData()</code></p>
454
+
455
+ <p>Now sometimes an element will have attributes like:
456
+ <code>&lt;name type=&quot;User&quot;&gt;Fenton&lt;/name&gt;</code>. In this case the part
457
+ <code>type=&quot;User&quot;</code> is an attribute and it can be extracted with:</p>
458
+ <div class="highlight"><pre><span class="n">StartElement</span> <span class="n">startElement</span> <span class="p">=</span> <span class="n">event</span><span class="p">.</span><span class="n">asStartElement</span><span class="p">();</span>
459
+ <span class="n">Iterator</span><span class="o">&lt;</span><span class="n">Attribute</span><span class="o">&gt;</span> <span class="n">attributes</span> <span class="p">=</span> <span class="n">startElement</span><span class="p">.</span><span class="n">getAttributes</span><span class="p">();</span>
460
+ <span class="k">while</span> <span class="p">(</span><span class="n">attributes</span><span class="p">.</span><span class="n">hasNext</span><span class="p">())</span> <span class="p">{</span>
461
+ <span class="n">Attribute</span> <span class="n">attribute</span> <span class="p">=</span> <span class="n">attributes</span><span class="p">.</span><span class="n">next</span><span class="p">();</span>
462
+ <span class="k">if</span> <span class="p">(</span><span class="n">attribute</span><span class="p">.</span><span class="n">getName</span><span class="p">().</span><span class="n">toString</span><span class="p">().</span><span class="n">equals</span><span class="p">(</span><span class="s">&quot;type&quot;</span><span class="p">));</span>
463
+ <span class="n">String</span> <span class="n">typeIsUser</span> <span class="p">=</span> <span class="n">attribute</span><span class="p">.</span><span class="n">getValue</span><span class="p">();</span>
464
+ <span class="p">}</span>
465
+ </pre>
466
+ </div>
467
+
468
+ <h2 id="Javadoc">7.1 - Javadoc</h2>
469
+
470
+ <p>link to method in same class</p>
471
+ <div class="highlight"><pre><span class="p">{@</span><span class="nb">link</span> <span class="c">#createServiceRequest(Map)}</span>
472
+ </pre>
473
+ </div>
474
+
475
+ <p>link to another class called <code>Contact</code></p>
476
+ <div class="highlight"><pre><span class="p">{@</span><span class="nb">link</span> <span class="n">Contact</span><span class="p">}</span>
477
+ </pre>
478
+ </div>
479
+
480
+ <p>link to a methond in another class</p>
481
+ <div class="highlight"><pre><span class="p">{@</span><span class="nb">link</span> <span class="n">Contact</span><span class="c">#getId(Map)}</span>
482
+ </pre>
483
+ </div>
484
+
485
+ <h2 id="Decompiling">7.2 - Decompiling</h2>
486
+
487
+ <p>This command decompiles all .class files located in all<br>
488
+ subdirectories of ‘tree’ and creates output files in
489
+ subdirectories<br>
490
+ of ‘src’ according to package names of classes. For example, if
491
+ file<br>
492
+ ‘tree/a/b/c.class’ contains class ‘c’ from package ‘a.b’, then<br>
493
+ output file will have a name ‘src/a/b/c.java’.</p>
494
+
495
+ <p>Note the use of the “two stars” wildcard (‘**’) in the previous<br>
496
+ command. It is handled by Jad rather than the command shell, so
497
+ on<br>
498
+ UNIX the last argument should be single-quoted:</p>
499
+
500
+ <p>bc.<br>
501
+ jad -r -sjava -dsrc ‘tree/<strong>/</strong>.class’</p>
502
+
503
+ <h2 id="Visual_VM">7.3 - Visual VM</h2>
504
+
505
+ <p>Can show you realtime heap usage info.</p>
506
+ <div class="highlight"><pre>cd <span class="cp">${</span><span class="n">JDK_HOME</span><span class="cp">}</span>/bin
507
+ vi jstatd.all.policy
508
+ </pre>
509
+ </div>
510
+
511
+ <p>Add the following:</p>
512
+ <div class="highlight"><pre>grant codebase &quot;file:<span class="cp">${</span><span class="n">java</span><span class="o">.</span><span class="n">home</span><span class="cp">}</span>/../lib/tools.jar&quot; {
513
+ permission java.security.AllPermission;
514
+ };
515
+ </pre>
516
+ </div>
517
+
518
+ <p>launch jstatd</p>
519
+ <div class="highlight"><pre><span class="o">./</span><span class="n">jstatd</span> <span class="o">-</span><span class="n">J</span><span class="o">-</span><span class="n">Djava</span><span class="p">.</span><span class="n">security</span><span class="p">.</span><span class="n">policy</span><span class="p">=</span><span class="n">jstatd</span><span class="p">.</span><span class="nb">all</span><span class="p">.</span><span class="n">policy</span> <span class="o">&amp;</span>
520
+ </pre>
521
+ </div>
522
+
523
+ <p>Fire up Visual VM and connect to host.</p>
524
+ </body>