1

Caused by: java.lang.NullPointerException有时会。看起来弹簧无法org.springframework.jmx.export.notification.NotificationPublisher正确注入。我正在使用 spring 2.5.6 并部署在 WebSphere 7 中。我们如何解决这个 NPE 问题?

import javax.management.Notification;

import org.springframework.jmx.export.notification.NotificationPublisher;
import org.springframework.jmx.export.notification.NotificationPublisherAware;

import com.xyz.SpringUtil;
import com.xyz.notification.INotificationMBean;
import com.xyz.security.impl.SpringSecurityHelper;

/**
 * provides a central class for the publishing of Notifications. This allows us to centralize all notification
 * Listeners configuration in a central location, for this one MBean.
 */
public class NotificationMBean implements INotificationMBean, NotificationPublisherAware {

    /** used to publish notifications. This will be set automatically by Spring */
    private NotificationPublisher notificationPublisher;
    private String proxyUser; // set by Spring - used for RMI-direct calls
    private SpringSecurityHelper securityHelper;

    protected SpringSecurityHelper getSecurityHelper() {
        if (securityHelper == null) {
            securityHelper = (SpringSecurityHelper) SpringUtil.getApplicationContext().getBean(
                    SpringSecurityHelper.SPRING_SECURITY_HELPER);
        }

        return securityHelper;
    }

    protected void setSecurityHelper(SpringSecurityHelper securityHelper) {
        this.securityHelper = securityHelper;
    }

    /**
     * {@inheritDoc}
     */
    public void publishNotification(Notification notif) {
        getSecurityHelper().switchUserIfUnauthenticated(getProxyUser());
        getNotificationPublisher().sendNotification(notif);
    }

    /**
     * Setter for notificationPublisher.
     * @param notificationPublisher NotificationPublisher
     */
    public void setNotificationPublisher(NotificationPublisher notificationPublisher) {
        this.notificationPublisher = notificationPublisher;
    }

    /**
     * Getter for the notificationPublisher.
     * @return NotificationPublisher Returns the notificationPublisher.
     */
    private NotificationPublisher getNotificationPublisher() {
        return notificationPublisher;
    }

    /**
     * {@inheritDoc}
     */
    public String getProxyUser() {
        return proxyUser;
    }

    /**
     * {@inheritDoc}
     */
    public void setProxyUser(String username) {
        this.proxyUser = username;
    }
}
4

1 回答 1

0

将以下声明添加到我的 spring 上下文文件后,错误消失了

<property name="notificationListeners">
            <list>
                <bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
                    <constructor-arg>
                        <ref bean="notificationListenerToDatabase" />
                    </constructor-arg>
                    <property name="namingStrategy" ref="mbeanNamingStrategy" />
                    <property name="mappedObjectNameTypePairs">
                        <map>
                            <entry>
                                <key>
                                    <value>sequenceGeneratorEarNotificationMBean</value>
                                </key>
                                <ref bean="NotificationMBean" />
                            </entry>
                        </map>
                    </property>
                </bean>
                <bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
                    <constructor-arg>
                        <ref bean="notificationListenerToTopic" />
                    </constructor-arg>
                    <property name="namingStrategy" ref="mbeanNamingStrategy" />
                    <property name="mappedObjectNameTypePairs">
                        <map>
                            <entry>
                                <key>
                                    <value>sequenceGeneratorEarNotificationMBean</value>
                                </key>
                                <ref bean="NotificationMBean" />
                            </entry>
                        </map>
                    </property>
                </bean>
                <bean class="com.xyz.mbean.impl.XYZNotificationListenerBean">
                    <constructor-arg ref="notificationListenerToExternal" />
                    <property name="namingStrategy" ref="mbeanNamingStrategy" />
                    <property name="mappedObjectNameTypePairs">
                        <map>
                            <entry key="sequenceGeneratorEarNotificationMBean" value-ref="NotificationMBean" />
                        </map>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
于 2016-08-24T14:32:50.167 回答