2015-08-26 3 views
0

J'essaye de déployer un webservice de savon sur wildfly 9.0.1-Final. J'essaye d'accéder au WebServletContext par l'injection de ressource mais c'est toujours nul. J'ai un fichier beans.xml dans WEB-INF. Voici la définition de la classe. LoadProperties est appelée à partir de contstructor.Obtenir une référence à WebServletContext sur wildfly

@WebService(endpointInterface = "com.ticomgeo.interfaces._2010.geonet.healthandstatus.v2.HealthAndStatusPortType", 
portName = "HealthAndStatusPort", 
wsdlLocation = "WEB-INF/classes/HealthAndStatusServiceV2.wsdl", serviceName = "HealthAndStatusService", 
targetNamespace = "http://interfaces.ticomgeo.com/2010/geonet/HealthAndStatus/v2") 
@HandlerChain(file="/HandlerChain.xml") 
@XmlSeeAlso({ 
    com.ticomgeo.schemas._2010.geonet.classificationtypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.designatortypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.basictypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.healthandstatusspecialtypes.v2.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.platformandsystemtypes.v2.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.common.signaltypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.platformantennatypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.platformandsystemresourcetypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.common.servicemessagetypes.v0.ObjectFactory.class, 
    com.ticomgeo.schemas._2010.geonet.healthandstatusspecialgeoservicetypes.v2.ObjectFactory.class }) 
public class HealthAndStatusPortImpl extends EimWebService implements HealthAndStatusPortType { 

private final static Logger log = Logger.getLogger(new Exception().getStackTrace()[0] 
     .getClassName()); 
private final static Logger LOGGER=log; 
private HSProperties props; 
private ServiceState serviceState; 
private AggregatorConnectionThread aggregatorConnectionThread; 
public String configHome=null; 

    @Resource(name="wscontext") 
private WebServiceContext wscontext; 

public void loadProperties() { 
    if (wscontext==null){ 
     throw new RuntimeException("wscontext = "+wscontext); 
    } 

Le déploiement échoue toujours à l'exception du test nul sur la WebServletContext

[[email protected]:9990 /] deploy /tmp/HealthAndStatusServiceV2.war 
{"WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment \"HealthAndStatusServiceV2.war\" 
    Caused by: java.lang.RuntimeException: java.lang.RuntimeException: wscontext = null 
    Caused by: java.lang.RuntimeException: wscontext = null"},"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".beanmanager]","jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".batch.environment is missing [jboss.deployment.unit.\"HealthAndStatusServiceV2.war\".beanmanager]"]}}} 
[[email protected]:9990 /] 

Nous vous remercions d'avance pour toute aide

mise à jour:

Changé l'annotation des ressources à

@Resource 
private WebServiceContext wscontext; 

mais a obtenu le même résultat sur Deploy

Répondre

0

Si vous spécifiez l'attribut name @Resource (wscontext), alors il doit être correctement décrit dans votre descripteur de déploiement (web.xml élément env-entry). Sinon, vous pouvez laisser tous ces éléments JNDI générés par le serveur d'applications en ne spécifiant pas du tout l'attribut name.

+0

Modifier l'annotation des ressources à @Resource WebServiceContext privé wscontext mais a obtenu le même résultat sur Deploy –

+0

Il semble que votre composant est instancié avec le CDI, mais ** @ ressources ** ne fait pas partie du CDI. Avez-vous vraiment besoin de WebServiceContext dans le constructeur? Je suspecte que CDI instancie votre composant, puis délègue le ** @ Resource ** au serveur d'applications pour terminer l'injection. Dans votre cas, si vous utilisez immédiatement ** @ Resource **, il se peut qu'il ne soit pas encore correctement initialisé. – Franck

+0

Je en ai besoin dans le constructeur pour obtenir le contexte de servlet. J'avais l'habitude d'être capable de gérer cela avec un servletContextListener, qui a fonctionné jusqu'à et y compris Tomcat 7.0.25. Si nous essayons de déployer sur la version 7.0.39, contextListener n'est pas invoqué avant la construction de ws impl. Puisque nous basculons vers Wildfly et qu'il existe un moyen d'obtenir le contexte de servlet à partir de WebServletContext, cela a semblé être une bonne alternative. Cependant, je suis vraiment nouveau pour les annotations. Y a-t-il une autre annotation que je peux utiliser pour forcer l'injection de WebServletContext? Est-ce que @Inject le ferait? –