使用 ajaxfileupload 外掛上傳圖片,Struts2 執行鏈中拋出 ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils。實為 依賴包版本衝突 / 包路徑錯誤 導致。
java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils
at org.apache.struts2.json.SerializationParams.<init>(SerializationParams.java:57)
at org.apache.struts2.json.JSONResult.writeToResponse(JSONResult.java:214)
...
org.apache.commons.lang.xwork.StringUtils 顯示 包路徑錯誤:正確應為 org.apache.commons.lang3.StringUtils (Commons Lang 3) 或 org.apache.commons.lang.StringUtils (Commons Lang 2.x)。xwork 是 Struts2 內部核心包,不應出現在 commons-lang 路徑中。commons-lang-2.x.jar 和 commons-lang3-3.x.jar,且類別載入器載入順序導致找不到預期類別。struts2-json-plugin 內部依賴 commons-lang3,若專案強制排除或版本不匹配會觸發此錯誤。mvn dependency:tree | grep commons-lang
確保僅保留一個版本,建議統一用 commons-lang3 (3.12.0+)。
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.5.30</version>
<exclusions>
<exclusion>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
mvn clean compile war:war,檢查 WEB-INF/lib 無 commons-lang-2.x.jar。ClassNotFoundException。xwork 內部類不應被應用層直接引用,若程式碼中有 import org.apache.struts2.xwork.* 請移除。mvn dependency:analyze 檢測未使用/衝突依賴。修正依賴版本衝突後,JSON 序列化恢復正常,檔案上傳功能穩定運作。