在以前的webservice中添加新的接口 项目是使用spring注解来实现依赖注入的,   写好方法后 在main方法中测试报错, 
  其他类都很正常,  new的类调用时总是报空指针。。 注入哪里有问题 谢谢 大神们
  类代码。
@Component("muB2CDSG")
public class MUB2CDSGClientImpl implements MUB2CDSGClient {
@Autowired
private ParameterService parameterService;

@Autowired
private CustomerService customerService;

@Autowired
private TmsContextInfo tmsContextInfo;public void init()
{
if(userId == 0){
userId = customerService.getUserId();
}
if(salesChannel == null || salesChannel.equals("")){
salesChannel = customerService.getSalesChannel();
}
if(usm == null){
try {
String uniHost = tmsContextInfo.getUniHost();
wsUrl = uniHost + SALE_WS_NAME;
URL url = new URL(wsUrl);

usm = new UniDsgManagerImplServiceLocator().getUniDsgManagerImplPort(url);

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
}

@Override
public UniDsgResult queryDsgInfo(String flightNo, String cabCode,
String date) throws TMSFirstException {
init(); UniDsgReq req=new UniDsgReq();
req.setSaleChannel(salesChannel);
req.setUserId(String.valueOf(userId));
req.setFlightNo(flightNo);
req.setCityPair(null);
req.setCabCode(cabCode); try {
UniDsgResult result=usm.displaySegment(req);
logger.info("MsgCode : " + result.getMsgCode());
logger.info("MsgDesc : " + result.getMsgDesc());

return result;
} catch (RemoteException e) {
e.printStackTrace();
}

return null;
}
main方法
public static void main(String[] args) {

try {
UniDsgResult result=new UniDsgResult();
result=dsgService.queryDsgInfo("MU5710", "y", "20110729");
System.out.println(result.getMsgCode());
System.out.println(result.getMsgDesc());

UniDsgSegment segment=result.getSegments(0);
System.out.println(segment.getCabin());
System.out.println(segment.getFlight());
System.out.println(segment.getStops());
for(int i=0;i<segment.getDstcity().length;i++){
System.out.println(segment.getDstcity(i));
}

System.out.println("***************");

for(int i=0;i<segment.getOrgcity().length;i++){
System.out.println(segment.getOrgcity(i));
}

// System.out.println(result.g());
System.out.println("***************");
} catch (TMSFirstException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

解决方案 »

  1.   

    少发东西了。  重新发  
     
    service代码@Component("dsgService")
    public class DSGServiceImpl implements DSGService {

    @Autowired
    private MUB2CDSGClient muB2CDSG; @Override
    public UniDsgResult queryDsgInfo(String flightNo, String cabCode,
    String date) throws TMSFirstException {

    return muB2CDSG.queryDsgInfo(flightNo, cabCode, date);
    }main方法代码
    @Autowired
    private static DSGService dsgService;

    public static void main(String[] args) {

    try {
    UniDsgResult result=new UniDsgResult();
    result=dsgService.queryDsgInfo("MU5710", "y", "20110729");
    System.out.println(result.getMsgCode());
    System.out.println(result.getMsgDesc());

    UniDsgSegment segment=result.getSegments(0);
    System.out.println(segment.getCabin());
    System.out.println(segment.getFlight());
    System.out.println(segment.getStops());
    for(int i=0;i<segment.getDstcity().length;i++){
    System.out.println(segment.getDstcity(i));
    }

    System.out.println("***************");

    for(int i=0;i<segment.getOrgcity().length;i++){
    System.out.println(segment.getOrgcity(i));
    }

    // System.out.println(result.g());
    System.out.println("***************");
    } catch (TMSFirstException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
      

  2.   

    用set  get试试 字段是private 的 应该没权访问吧
      

  3.   

    好像不需要getset方法。  其他的类里都没有getset方法。。只是加了@Autowired  
      

  4.   

    spring的这种问题一般都是你没有注入的原因,调试很简单,你看下你新加的接口和以前成功添加的接口有什么不同,肯定是没有注入成功,所以初始化时候内存中没有这个新的对象,你调用时候才空指针
      

  5.   

    没办法调试  在运行main方法时报了空指针,   
    Exception in thread "main" java.lang.NullPointerException
    at net.rytong.tms.dao.ws.impl.Test.main(Test.java:22)
    上边main方法的22行是    try{
    再写别的代码 还是22行报错   是private static DSGService dsgService;报错了么。。
      

  6.   

    关键是使用main方法的这个类有没有让spring来管理,如果没有的话,就无法使用spring的@Autowired为该类自动注入。此时就要使用BeanFactory为其手动注入了。我看楼主的问题是出在这个地方吧。