2013-08-25 3 views
0

При попытке запустить этот сценарий, чтобы обеспечить свои веб-сервисы на Grails/CXF клиента я получаюGrails + CXF + secureServiceFactory

"Невозможно вызвать метод getInInterceptors() на нулевой объект" на secureServiceFactory

ли secureServiceFactory нужно установить в другом месте?

Любые идеи:

Код:

class BootStrap { 

def secureServiceFactory 

def init = { servletContext -> 

    Map<String, Object> inProps = [:] 
    inProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); 
    inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); 
    Map<QName, Validator> validatorMap = new HashMap<QName, Validator>(); 
    validatorMap.put(WSSecurityEngine.USERNAME_TOKEN, new UsernameTokenValidator() { 

     @Override 
     protected void verifyPlaintextPassword(org.apache.ws.security.message.token.UsernameToken usernameToken, org.apache.ws.security.handler.RequestData data) 
      throws org.apache.ws.security.WSSecurityException { 
      if(data.username == "wsuser" && usernameToken.password == "secret") { 
     println "username and password are correct!" 
    } else { 
     println "username and password are NOT correct..." 
       throw new WSSecurityException("user and/or password mismatch") 
      } 
     } 
    }); 
    inProps.put(WSS4JInInterceptor.VALIDATOR_MAP, validatorMap); 
    secureServiceFactory.getInInterceptors().add(new WSS4JInInterceptor(inProps)) 
} 
+1

Возможно, вы захотите включить свои ресурсы.groovy или указать, какой плагин, по вашему мнению, дает вам инъекцию secureServiceFactory. – billjamesdev

+0

Я просто следил за этим примером: http://www.christianoestreich.com/2012/04/grails-cxf-interceptor-injection/ Так что мои ресурсы.groovy по-прежнему пусты. – user2672286

+1

Прочтите статью еще раз. Плагин cxf подключает сервисные фабрики, которые будут совпадать ** с названием вашей открытой службы, такой как 'secureService', с bean с именем' secureServiceFactory' **. У вас есть служба под названием «secureService»? – dmahapatro

ответ

0

Не уверен, что это общий ответ, но я получаю те же ошибки, и я понимаю, что CXF плагин предназначен для телеграфировать обслуживания фабрик, будет соответствовать имени вашего открытого сервиса. Я проверил это, используя программу grails-cxf, используя приложение grails run-app. однако при выполнении grails war в проекте создается война, которая при развертывании на сервере tc [vfabric-tc-server-developer-2.9.4.RELEASE] tomcat 7 [tomcat-7.0.47.A.RELEASE] возникает эта ошибка.

Также полезно отметить, что из коробки, так как плагин автор отметил в других работах [http://www.christianoestreich.com/2012/04/grails-cxf-interceptor-injection/] генерируемый война не будет работать, если вы не измените test('org.apache.ws.security:wss4j:1.6.7') на compile('org.apache.ws.security:wss4j:1.6.7') и я отмечаю, что я не смог сделать это работа, я должен был использовать compile('org.apache.ws.security:wss4j:1.6.9')

к сожалению, после того, превосходя это, я бегу в третью ошибку при развертывании войны, которая не возникает в grails run-app:

22-Aug-2014 11:46:05.062 SEVERE [tomcat-http--1] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet CxfServlet 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' is defined 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:979) 
    at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:75) 

Я буду продолжать смотреть на него, но, возможно, эта война не предназначена для развертывания , но больше предназначен только для разработки самого плагина. однако, если это так, было бы лучше работать в TC, потому что тогда мы с уверенностью можем использовать код в наших собственных проектах.

Смежные вопросы