<BEA-000386> <Server subsystem failed. Reason: java.lang.AssertionError: java.lang.reflect.Invocatio

本文解决WebLogic因密码解析问题导致的启动失败。通过调整生产模式设置、修改配置文件中的密码,并更新控制台密码,最终恢复正常运行。

  昨天启动Weblogic adminServer失败,报错信息如下:

<Feb 18, 2013 9:51:05 AM CST> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: java.lang.AssertionError: java.lang.reflect.InvocationTargetException
java.lang.AssertionError: java.lang.reflect.InvocationTargetException
 at weblogic.descriptor.DescriptorManager$SecurityServiceImpl$SecurityProxy._invokeServiceMethod(DescriptorManager.java:175)
 at weblogic.descriptor.DescriptorManager$SecurityServiceImpl$SecurityProxy.decrypt(DescriptorManager.java:192)
 at weblogic.descriptor.DescriptorManager$SecurityServiceImpl.decrypt(DescriptorManager.java:114)
 at weblogic.descriptor.internal.AbstractDescriptorBean._decrypt(AbstractDescriptorBean.java:991)
 at weblogic.management.configuration.SecurityConfigurationMBeanImpl.getCredential(SecurityConfigurationMBeanImpl.java:736)
 Truncated. see log file for complete stacktrace

Caused By: java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:600)
 at weblogic.descriptor.DescriptorManager$SecurityServiceImpl$SecurityProxy._invokeServiceMethod(DescriptorManager.java:173)
 Truncated. see log file for complete stacktrace

Caused By: weblogic.security.internal.encryption.EncryptionServiceException: com.rsa.jsafe.JSAFE_PaddingException: Could not perform unpadding: invalid pad byte.
 at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptBytes(JSafeEncryptionServiceImpl.java:125)
 at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptString(JSafeEncryptionServiceImpl.java:173)
 at weblogic.security.internal.encryption.ClearOrEncryptedService.decrypt(ClearOrEncryptedService.java:96)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
 Truncated. see log file for complete stacktrace

Caused By: com.rsa.jsafe.JSAFE_PaddingException: Could not perform unpadding: invalid pad byte.
 at com.rsa.jsafe.JA_PKCS5Padding.a(Unknown Source)
 at com.rsa.jsafe.JG_BlockCipher.decryptFinal(Unknown Source)
 at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptBytes(JSafeEncryptionServiceImpl.java:113)
 at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptString(JSafeEncryptionServiceImpl.java:173)
 at weblogic.security.internal.encryption.ClearOrEncryptedService.decrypt(ClearOrEncryptedService.java:96)
 Truncated. see log file for complete stacktrace
>
<Feb 18, 2013 9:51:05 AM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FAILED>
<Feb 18, 2013 9:51:05 AM CST> <Error> <WebLogicServer> <BEA-000383> <A critical service failed. The server will shut itself down>
<Feb 18, 2013 9:51:05 AM CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FORCE_SHUTTING_DOWN>
这应该是密码解析问题,在%DOMAIN_HOME%/servers/AdminServer/security/boot.properties中看到用户名和密码是明文,记得前段将用户名和密码从startWebLogic.sh放到了boot.properties,应该是这个问题造成的。在网上搜索解决方法,有一篇https://forums.oracle.com/forums/thread.jspa?threadID=1022442

步骤一:如果你的Weblogic是生产模式请将其改成开发模式(可参看http://blog.youkuaiyun.com/cuihaiyang/article/details/8289148),否则weblogic不支持在config.xml中使用明文密码而启动失败。

 将domain路径下%DOMAIN_HOME%\bin\setDomainEnv.cmd文件set PRODUCTION_MODE=true 更改为 set PRODUCTION_MODE=false 或set PRODUCTION_MODE=

    %DOMAIN_HOME%\config\config.xml文件中<production-mode-enabled>true</production-mode-enabled>更改为<production-mode-enabled>false</production-mode-enabled>或者直接删掉。

步骤二:修改%DOMAIN_HOME%/config/config.xml文件,将

<default-realm>myrealm</default-realm>
<credential-encrypted>weblogic123</credential-encrypted>
<node-manager-username>weblogic</node-manager-username>
<node-manager-password-encrypted>weblogic123</node-manager-password-encrypted>

<embedded-ldap>
    <name>base_domain</name>
    <credential-encrypted>weblogic123</credential-encrypted>
</embedded-ldap>

中加密的用户名和密码替换成自己的用户名和密码(我的用户名weblogic,密码weblogic123),再次启动Weblogic成功。weblogic会自动将%DOMAIN_HOME%/servers/AdminServer/security/boot.properties中的用户名和密码加密。

#Mon Feb 18 09:54:46 CST 2013
password={AES}9ymlSJ82yzBzGH0sLgATptcNvdJ1tn6Wdbt248iMRnY\=
username={AES}RnjKpCymMz0aVpuFc5V0ok8A8xJV5od21aWerppJ9V4\=

步骤三:在控制台(base_domain-》安全)修改realm、nodemananger和ldap的密码

保存后weblogic会自动加密密码并更新到config.xml中

<credential-encrypted>{AES}wv4rulmnNCdQZhope1ehp6TGnE9YOzqhOwCTSL3xOBw=</credential-encrypted>
<node-manager-username>weblogic</node-manager-username>
<node-manager-password-encrypted>{AES}XhbgIeSqoN2SCg7hxhfeo7hAfgvLrEX3dgEyRMtTdNI=</node-manager-password-encrypted>

<embedded-ldap>
    <name>base_domain</name>
    <credential-encrypted>{AES}wSZq29RMDZWOQGXjD2l45VEdEfua3n3G1bNAabWfFQk=</credential-encrypted>
    <backup-hour>23</backup-hour>
    <backup-minute>5</backup-minute>
    <backup-copies>7</backup-copies>
    <cache-enabled>true</cache-enabled>
    <cache-size>32</cache-size>
    <cache-ttl>60</cache-ttl>
    <refresh-replica-at-startup>false</refresh-replica-at-startup>
    <master-first>false</master-first>
    <timeout>0</timeout>
    <anonymous-bind-allowed>false</anonymous-bind-allowed>
</embedded-ldap>

步骤四:与步骤一相反,关闭Weblogic,将Weblogic从开发模式改成生产模式,重新启动。

 

 

 

Java 的 PrimeFaces 框架应用中,`java.lang.NullPointerException` 是一种常见的运行时异常,通常发生在尝试访问或操作一个为 `null` 的对象引用时。这种情况在使用 PrimeFaces 组件绑定(如 `@ManagedProperty`、`@PostConstruct` 方法、组件的 `value` 或 `action` 属性等)时尤为常见。 ### 常见原因及解决方案 #### 1. **未正确初始化托管 Bean 属性** - 在使用 `@ManagedProperty` 注入其他 Bean 或页面参数时,如果目标对象未正确初始化,可能会导致 `NullPointerException`。 - 示例: ```java @ManagedBean public class MyBean { @ManagedProperty("#{param.id}") private String id; public void init() { // 如果 id 为 null,后续操作会抛出 NullPointerException } } ``` - **解决方案**:确保在使用注入属性之前进行非空检查,或者在 `@PostConstruct` 方法中进行初始化。 ```java @PostConstruct public void init() { if (id != null) { // 正常处理 } else { // 设置默认值或处理空值情况 } } ``` #### 2. **未正确绑定组件属性** - 在 XHTML 页面中,如果某个组件的 `value` 或 `action` 属性绑定到一个未初始化的变量或方法,也可能导致异常。 - 示例: ```xhtml <p:inputText value="#{myBean.user.name}" /> ``` 如果 `user` 为 `null`,则访问 `user.name` 会抛出异常。 - **解决方案**:在后端 Bean 中确保对象已正确初始化。 ```java @ManagedBean public class MyBean { private User user; @PostConstruct public void init() { user = new User(); // 确保 user 不为 null } // Getter and Setter } ``` #### 3. **未正确处理 AJAX 请求中的空值** - 在执行 AJAX 操作时,如果某些组件的值未正确设置,可能会导致后端方法接收到 `null` 参数。 - 示例: ```xhtml <p:commandButton actionListener="#{myBean.save(user)}" update="messages" /> ``` 如果 `user` 为 `null`,则 `save()` 方法中会抛出异常。 - **解决方案**:在方法中加入空值检查。 ```java public void save(User user) { if (user == null) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("User cannot be null")); return; } // 正常保存逻辑 } ``` #### 4. **未正确配置 PrimeFaces 组件** - 某些 PrimeFaces 组件(如 `<p:dataTable>`)依赖于后端数据源,如果数据源未正确设置,也可能导致异常。 - 示例: ```xhtml <p:dataTable value="#{myBean.items}" var="item"> <p:column>#{item.name}</p:column> </p:dataTable> ``` 如果 `items` 为 `null`,则组件可能抛出异常。 - **解决方案**:确保数据源在构造或初始化时被正确赋值。 ```java @ManagedBean public class MyBean { private List<Item> items; @PostConstruct public void init() { items = itemService.findAll(); // 确保不为 null } } ``` #### 5. **日志和调试** - 在开发过程中,启用日志记录可以帮助定位 `NullPointerException` 的具体位置。使用 `System.out.println()` 或日志框架(如 Log4j、SLF4J)输出变量状态。 - 示例: ```java @PostConstruct public void init() { System.out.println("User object: " + user); // 检查是否为 null } ``` #### 6. **使用 Optional 类型(Java 8+)** - 使用 `Optional<T>` 可以避免直接操作可能为 `null` 的对象,从而减少 `NullPointerException` 的发生。 - 示例: ```java public Optional<User> findUserById(String id) { return Optional.ofNullable(userRepository.findById(id)); } // 使用时 Optional<User> userOpt = findUserById("123"); userOpt.ifPresent(user -> { // 安全访问 user }); ``` ### 总结 在 PrimeFaces 应用中处理 `java.lang.NullPointerException` 的关键在于: - 确保所有注入和绑定的对象在使用前已正确初始化; - 在业务逻辑中加入空值检查; - 使用现代 Java 特性(如 `Optional`)增强代码的健壮性; - 合理利用日志工具进行调试和问题定位。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值