我有以下类的设置。我试图通过两个协议进行相同的操作 - 基于Web服务和基于JMS
在EJB模块中我有
public abstract class AbstractMsgListener {
@EJB(name = "classLoadUtil")
private ClassLoadUtil classLoadUtil;
protected void doSomething()
classLoadUtil.doSomething();
}
}
有一个MDB
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/myqueue") })
public class MDB_JMSHandler extends AbstractMsgListener implements MessageListener {
public void onMessage(Message inMessage) {
TextMessage textMessage = getTextMessage(inMessage);
doSomething();
}
}
我有一个基于JAX-WS实现的Web服务,如下面给出的那样
@WebService(name = "...", targetNamespace = "...")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({ com.message.beans.ObjectFactory.class })
public class WebServiceImpl extends AbstractMsgListener implements com.message.beans.WebServicesPortType {
@Override
@WebMethod(operationName = "...", action = "...")
@WebResult(name = "...", targetNamespace = "...", partName = "...")
public WSDataResponse syncWSData(@WebParam(name = "...", targetNamespace = "...", partName = "...") WSDataRequest wsDataRequest) {
doSomething();
WSDataResponse response = new WSDataResponse();
Acknowledgement ack = new Acknowledgement();
ack.setMessage("Success");
ack.setReturnCd("0");
response.setAcknowledgement(ack);
return response;
}
}
Abstract类位于单独的EJB模块中。 MDB和Web服务实现存在于单独的Web应用程序项目中。在执行期间,MDB按预期工作。但Web服务抛出NullPointerException。原因是以下代码无法正常用于Webservice
@EJB(name = "classLoadUtil")
private ClassLoadUtil classLoadUtil;
没有为classLoadUtil分配任何对象。但同样适用于MDB。 我想我在这里错过了一些东西。
答案 0 :(得分:0)
我建议使用默认实现,看看它是否有效。
@WebService(name = "...", targetNamespace = "...")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({ com.message.beans.ObjectFactory.class })
public class WebServiceImpl extends AbstractMsgListener implements com.message.beans.WebServicesPortType {
@EJB(name = "classLoadUtil")
private ClassLoadUtil classLoadUtil;
然后在 syncWSData 方法中使用EJB classLoadUtil ,看看它是否有效。
如果确实有效,那么您可以尝试继承版本。
如果它不起作用,那么我认为这是WS类的 webproject 中的类路径问题。