Velocity-Tools в приложении Spring 3 - Linktool вызывает NPE, как решить? - PullRequest
1 голос
/ 15 сентября 2011

Я использую модифицированный VelocityToolboxView (его можно найти где-то здесь на stackoverflow), чтобы использовать Velocity-Tools 2.0 весной 3. Похоже, он хорошо настраивается, но когда я вызываю инструмент $ link в .vmфайл я получаю NPE.Сканирование по источникам Velocity-Tools Я обнаружил, что он пытается настроить инструмент с запросом и ответом от реквизитов ValueParser, но здесь они равны нулю.

Здесь стек:

LinkTool.configure(ValueParser) line: 100   
LinkTool(SafeConfig).configure(Map) line: 113   
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597  
ToolInfo.invoke(Method, Object, Object) line: 363   
ToolInfo.configure(Object, Map<String,Object>) line: 294    
ToolInfo.create(Map<String,Object>) line: 255   
Toolbox.getFromInfo(String, String, Map<String,Object>) line: 152   
Toolbox.get(String, String, Map<String,Object>) line: 112   
ToolContext.findTool(String) line: 221  
ToolContext.get(String) line: 206   
VelocityContext(AbstractContext).get(String) line: 197  

Когда ValueParser должен иметь значения запроса / ответа в своей карте в это время, где это обычно вводится и кем?

Вот класс представления, который я использую:

public class VelocityToolsView extends VelocityToolboxView
{

  private static ToolContext toolContext;

  @Override
  protected Context createVelocityContext(@SuppressWarnings("rawtypes") Map model,
      HttpServletRequest request, HttpServletResponse response) throws IOException
  {
    VelocityContext context = new VelocityContext(getToolContext());
    if (model != null)
    {
      @SuppressWarnings("unchecked")
      Set<Map.Entry<String, Object>> entrySet = model.entrySet();
      for (Map.Entry<String, Object> entry : entrySet)
      {
        context.put(entry.getKey(), entry.getValue());
      }
    }
    return context;
  }

  private ToolContext getToolContext() throws IllegalStateException, IOException
  {
    if (toolContext == null)
    {
      XmlFactoryConfiguration factoryConfiguration = new XmlFactoryConfiguration("Default Tools");
      factoryConfiguration.read(getServletContext()
          .getResourceAsStream(getToolboxConfigLocation()));
      ToolManager toolManager = new ToolManager();
      toolManager.configure(factoryConfiguration);
      toolContext = toolManager.createContext();
    }
    return toolContext;
  }

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

VelocityToolbox - это что-то с древних времен, которое устарело 5 лет назад.Я использую эту технику для интеграции инструментов в Spring.

0 голосов
/ 16 января 2013

Я тоже нашел эту проблему и в конце концов решил ее, используя это изменение в методе @ serg.

...