Skip to content

Commit 55446d4

Browse files
pgoronmfateev
authored andcommitted
Multiple fixes to get build and unit-tests passing when building cadence-java-client from Windows. (#291)
* WorflowServiceTChannel: fix failure to establish connection with cadence-server due to null user-name in thrift headers. On Windows user-name is provided by USERNAME environment variable instead of USER on Unix. com.uber.cadence.workflow.WorkflowTest > initializationError FAILED java.lang.ExceptionInInitializerError Caused by: java.lang.NullPointerException: null value in entry: user-name=null at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:32) at com.google.common.collect.ImmutableMap.entryOf(ImmutableMap.java:176) at com.google.common.collect.ImmutableMap$Builder.put(ImmutableMap.java:285) at com.uber.cadence.serviceclient.WorkflowServiceTChannel.getThriftHeaders(WorkflowServiceTChannel.java:425) at com.uber.cadence.serviceclient.WorkflowServiceTChannel.<init>(WorkflowServiceTChannel.java:377) at com.uber.cadence.serviceclient.WorkflowServiceTChannel.<init>(WorkflowServiceTChannel.java:344) at com.uber.cadence.workflow.WorkflowTest.<clinit>(WorkflowTest.java:181) * CustomThrowableTypeAdapter : fix wrong deserialization of throwable stacktrace generated from windows hosts. Windows end of line "\r\n" not properly detected. com.uber.cadence.converter.DataConverterException: when parsing:"{"detailMessage":"application exception","cause":{"detailMessage":"Failure serializing exception: com.uber.cadence.converter.JsonDataConverterTest$NonSerializableException: java.lang.RuntimeException: root exception","cause":{"detailMessage":null,"cause":" into following types: [class java.lang.RuntimeException] at com.uber.cadence.converter.JsonDataConverter.fromData(JsonDataConverter.java:112) at com.uber.cadence.converter.JsonDataConverterTest.testException(JsonDataConverterTest.java:255) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) Caused by: java.lang.NullPointerException: stackTrace[0] at java.lang.Throwable.setStackTrace(Throwable.java:867) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:155) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:34) at com.google.gson.TypeAdapter$1.read(TypeAdapter.java:199) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:285) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:154) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:34) at com.google.gson.TypeAdapter$1.read(TypeAdapter.java:199) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:285) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:154) at com.uber.cadence.converter.CustomThrowableTypeAdapter.read(CustomThrowableTypeAdapter.java:34) at com.google.gson.TypeAdapter$1.read(TypeAdapter.java:199) at com.google.gson.Gson.fromJson(Gson.java:927) at com.google.gson.Gson.fromJson(Gson.java:892) at com.google.gson.Gson.fromJson(Gson.java:841) at com.uber.cadence.converter.JsonDataConverter.fromData(JsonDataConverter.java:110) * add gradle wrapper script for windows (generated with gradle wrapper) * enforce javadoc encoding to UTF-8 to avoid build failures due to unmappable characters to local charset > Task :javadoc cadence-java-client\src\main\java\com\uber\cadence\workflow\Workflow.java:1007: error: unmappable character for encoding Cp1252 * it will fail here and not proceed; 2) if you ever need to make more changes for ÔÇ£fooChangeÔÇ?, ^ cadence-java-client\src\main\java\com\uber\cadence\workflow\Workflow.java:1013: error: unmappable character for encoding Cp1252 * sure: 1) all older version executions are completed; 2) you can no longer use ÔÇ£fooChangeÔÇ? as ^ cadence-java-client\src\main\java\com\uber\cadence\workflow\Workflow.java:1015: error: unmappable character for encoding Cp1252 * changeID like ÔÇ£fooChange-fix2ÔÇ?, and start minVersion from DefaultVersion again. ^ 3 errors
1 parent 88a0583 commit 55446d4

File tree

4 files changed

+90
-2
lines changed

4 files changed

+90
-2
lines changed

build.gradle

+4
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ if (JavaVersion.current().isJava8Compatible()) {
102102
}
103103
}
104104

105+
javadoc {
106+
options.encoding = 'UTF-8'
107+
}
108+
105109
task javadocJar(type: Jar) {
106110
classifier = 'javadoc'
107111
from javadoc

gradlew.bat

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
@if "%DEBUG%" == "" @echo off
2+
@rem ##########################################################################
3+
@rem
4+
@rem Gradle startup script for Windows
5+
@rem
6+
@rem ##########################################################################
7+
8+
@rem Set local scope for the variables with windows NT shell
9+
if "%OS%"=="Windows_NT" setlocal
10+
11+
set DIRNAME=%~dp0
12+
if "%DIRNAME%" == "" set DIRNAME=.
13+
set APP_BASE_NAME=%~n0
14+
set APP_HOME=%DIRNAME%
15+
16+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17+
set DEFAULT_JVM_OPTS=
18+
19+
@rem Find java.exe
20+
if defined JAVA_HOME goto findJavaFromJavaHome
21+
22+
set JAVA_EXE=java.exe
23+
%JAVA_EXE% -version >NUL 2>&1
24+
if "%ERRORLEVEL%" == "0" goto init
25+
26+
echo.
27+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28+
echo.
29+
echo Please set the JAVA_HOME variable in your environment to match the
30+
echo location of your Java installation.
31+
32+
goto fail
33+
34+
:findJavaFromJavaHome
35+
set JAVA_HOME=%JAVA_HOME:"=%
36+
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37+
38+
if exist "%JAVA_EXE%" goto init
39+
40+
echo.
41+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42+
echo.
43+
echo Please set the JAVA_HOME variable in your environment to match the
44+
echo location of your Java installation.
45+
46+
goto fail
47+
48+
:init
49+
@rem Get command-line arguments, handling Windows variants
50+
51+
if not "%OS%" == "Windows_NT" goto win9xME_args
52+
53+
:win9xME_args
54+
@rem Slurp the command line arguments.
55+
set CMD_LINE_ARGS=
56+
set _SKIP=2
57+
58+
:win9xME_args_slurp
59+
if "x%~1" == "x" goto execute
60+
61+
set CMD_LINE_ARGS=%*
62+
63+
:execute
64+
@rem Setup the command line
65+
66+
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67+
68+
@rem Execute Gradle
69+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70+
71+
:end
72+
@rem End local scope for the variables with windows NT shell
73+
if "%ERRORLEVEL%"=="0" goto mainEnd
74+
75+
:fail
76+
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77+
rem the _cmd.exe /c_ return code!
78+
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79+
exit /b 1
80+
81+
:mainEnd
82+
if "%OS%"=="Windows_NT" endlocal
83+
84+
:omega

src/main/java/com/uber/cadence/converter/CustomThrowableTypeAdapter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ private StackTraceElement[] parseStackTrace(JsonObject object) {
171171
}
172172
try {
173173
@SuppressWarnings("StringSplitter")
174-
String[] lines = stackTrace.split("\n");
174+
String[] lines = stackTrace.split("\r\n|\n");
175175
StackTraceElement[] result = new StackTraceElement[lines.length];
176176
for (int i = 0; i < lines.length; i++) {
177177
result[i] = parseStackTraceElement(lines[i]);

src/main/java/com/uber/cadence/serviceclient/WorkflowServiceTChannel.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ public WorkflowServiceTChannel(SubChannel subChannel, ClientOptions options) {
412412
}
413413

414414
private static Map<String, String> getThriftHeaders(ClientOptions options) {
415-
String envUserName = System.getenv("USER");
415+
String envUserName = System.getProperty("user.name");
416416
String envHostname;
417417
try {
418418
envHostname = InetAddress.getLocalHost().getHostName();

0 commit comments

Comments
 (0)