myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leonardo Uribe <lu4...@gmail.com>
Subject Re: UIComponentBase.java - context.getViewRoot() returns null
Date Thu, 25 Mar 2010 16:05:16 GMT
Hi

2010/3/25 Matthias Leis <matthias.leis@gmx.net>

> Hi,
>
> I am not that into myfaces and webflow, so I better ask before creating an
> issue. ;)
> What exactly should be done by webflow? Should they call
> facesContext.setViewRoot(uiViewRoot) too? Wouldn't that be very...
> JSF-specific?
>
>
Yes, because FlowViewStateManager is not just delegating in this case, it is
saving and restoring by itself, so it is necessary in this case. In the
javadoc of StateManager, the methods restoreTreeStructure and
restoreComponentState now are implementation details, so in jsf 1.2 of upper
restoreView method should be used.

regards,

Leonardo Uribe



> Matthias
> -------- Original-Nachricht --------
> > Datum: Tue, 23 Mar 2010 10:55:10 -0500
> > Von: Leonardo Uribe <lu4242@gmail.com>
> > An: MyFaces Discussion <users@myfaces.apache.org>
> > Betreff: Re: UIComponentBase.java - context.getViewRoot() returns null
>
> > Hi
> >
> > Looking the stack trace provided very carefully, I can see the problem is
> > not in myfaces, it is on spring class FlowViewStateManager. Take a look
> at
> > this three lines:
> >
> > at
> > javax.faces.component.UIViewRoot.processRestoreState(UIViewRoot.java:643)
> >
> > at
> >
> org.springframework.faces.webflow.FlowViewStateManager.restoreComponentState(FlowViewStateManager.java:77)
> >
> > at
> >
> org.springframework.faces.webflow.FlowViewStateManager.restoreView(FlowViewStateManager.java:159)
> >
> >
> > The code related is this:
> >
> >       public UIViewRoot restoreView(FacesContext context, String viewId,
> > String renderKitId) {
> >               if (!JsfUtils.isFlowRequest()) {
> >                       return delegate.restoreView(context, viewId,
> renderKitId);
> >               }
> >               UIViewRoot viewRoot = restoreTreeStructure(context, viewId,
> > renderKitId);
> >               if (viewRoot != null) {
> >                       restoreComponentState(context, viewRoot,
> renderKitId);
> >               }
> >               return viewRoot;
> >       }
> >
> > What's the problem? well, look this code from myfaces
> JspStateManagerImpl:
> >
> >             if (state != null) {
> >                 Object[] stateArray = (Object[])state;
> >                 TreeStructureManager tsm = new TreeStructureManager();
> >                 uiViewRoot = tsm.restoreTreeStructure(stateArray[0]);
> >
> >                 if (uiViewRoot != null) {
> >                     facesContext.setViewRoot (uiViewRoot);
> >                     uiViewRoot.processRestoreState(facesContext,
> > stateArray[1]);
> >                 }
> >             }
> >
> > It is supposed after restore the tree structure, that
> > facesContext.setViewRoot(uiViewRoot) should be called. Inclusive, in
> > DefaultFaceletsStateManagementStrategy we do the same too. An issue
> should
> > be created against spring web flow.
> >
> > regards,
> >
> > Leonardo Uribe
> >
> > 2010/3/23 Jakob Korherr <jakob.korherr@gmail.com>
> >
> > > Yeah, great! Thanks ;)
> > >
> > > Regards,
> > > Jakob
> > >
> > > 2010/3/23 Matthias Leis <matthias.leis@gmx.net>
> > >
> > > > Hi,
> > > >
> > > > JIRA link is https://issues.apache.org/jira/browse/MYFACES-2620
> > > >
> > > > I hope I've done it right ;)
> > > >
> > > > Matthias
> > > > -------- Original-Nachricht --------
> > > > > Datum: Tue, 23 Mar 2010 15:59:22 +0100
> > > > > Von: Jakob Korherr <jakob.korherr@gmail.com>
> > > > > An: MyFaces Discussion <users@myfaces.apache.org>
> > > > > Betreff: Re: UIComponentBase.java - context.getViewRoot() returns
> > null
> > > >
> > > > > Hi,
> > > > >
> > > > > OK great! I'll take a look at it later ;)
> > > > >
> > > > > Regards,
> > > > > Jakob
> > > > >
> > > > > 2010/3/23 Matthias Leis <matthias.leis@gmx.net>
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > I just saw, that I'm not working with the beta 2 but with the
> > > snapshot.
> > > > > In
> > > > > > beta 2 the NPW is thrown at line 1038 (in snapshot at line 1041).
> > > > > > The line is:
> > > > > >
> > > > > >   String renderKitId = context.getViewRoot().getRenderKitId();
> > > > > >
> > > > > > And looking at the variables in debugging mode says, that the
> > > viewRoot
> > > > > is
> > > > > > null. Sorry for the confusion :)
> > > > > >
> > > > > > Of course I don't mind to open a JIRA issue :)
> > > > > >
> > > > > > PS: I know tomahawk isn't even supposed to work with myfaces
2,
> > but
> > > in
> > > > > > generally it does. This one here is the only compatibility
> problem
> > I
> > > > > found
> > > > > > (...for now ;) )
> > > > > >
> > > > > > Matthias
> > > > > > -------- Original-Nachricht --------
> > > > > > > Datum: Tue, 23 Mar 2010 15:44:32 +0100
> > > > > > > Von: Jakob Korherr <jakob.korherr@gmail.com>
> > > > > > > An: MyFaces Discussion <users@myfaces.apache.org>
> > > > > > > Betreff: Re: UIComponentBase.java - context.getViewRoot()
> > returns
> > > > null
> > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > Unfortunately there is no tomahawk port for MyFaces 2.0
> > available
> > > > yet,
> > > > > so
> > > > > > > this might be a compatibility problem.
> > > > > > >
> > > > > > > I traced the Exception down and found out that it happens,
> > because
> > > > the
> > > > > > > RenderKitFactory returns null for the RenderKit here, see
the
> > code
> > > > > from
> > > > > > > UIComponentBase:
> > > > > > >
> > > > > > >         String renderKitId =
> > > context.getViewRoot().getRenderKitId();
> > > > > > >         RenderKitFactory rkf = (RenderKitFactory)
> > > > > > > FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
> > > > > > >         RenderKit renderKit = rkf.getRenderKit(context,
> > > renderKitId);
> > > > > > >         Renderer renderer = renderKit.getRenderer(getFamily(),
> > > > > > > rendererType);
> > > > > > >
> > > > > > > In the last line renderKit is null and thus we get a NPE.
> > > > > > >
> > > > > > > Do you mind opening a JIRA issue for this? This would be
really
> > > > great.
> > > > > > >
> > > > > > > Thanks!
> > > > > > >
> > > > > > > Regards,
> > > > > > > Jakob
> > > > > > >
> > > > > > > 2010/3/23 Matthias Leis <matthias.leis@gmx.net>
> > > > > > >
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > I'm using myfaces 2.0 beta 2 and currently I'm using
a
> > > > <h:dataTable>
> > > > > on
> > > > > > > my
> > > > > > > > pages and everything is fine.
> > > > > > > > For some reasons (sorting etc.) I want to use the
> > <t:dataTable>
> > > > > (from
> > > > > > > > Tomahawk 1.1.9).
> > > > > > > >
> > > > > > > > Now, when I click on a link inside the table, I get
the
> > following
> > > > > > > > exception:
> > > > > > > > java.lang.NullPointerException
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> javax.faces.component.UIComponentBase.getRenderer(UIComponentBase.java:1041)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.component.html.ext.HtmlDataTableHack.getClientId(HtmlDataTableHack.java:111)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.getClientId(AbstractHtmlDataTable.java:135)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.component.html.ext.HtmlDataTableHack.setRowIndex(HtmlDataTableHack.java:275)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.component.html.ext.AbstractHtmlDataTable.setRowIndex(AbstractHtmlDataTable.java:276)
> > > > > > > >        at
> > > javax.faces.component.UIData.visitTree(UIData.java:1257)
> > > > > > > >        at
> > > > > > >
> > javax.faces.component.UIComponent.visitTree(UIComponent.java:770)
> > > > > > > >        at
> > > > > > >
> > javax.faces.component.UIComponent.visitTree(UIComponent.java:770)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > >
> > >
> > javax.faces.component.UIViewRoot.processRestoreState(UIViewRoot.java:648)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.faces.webflow.FlowViewStateManager.restoreComponentState(FlowViewStateManager.java:77)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.faces.webflow.FlowViewStateManager.restoreView(FlowViewStateManager.java:159)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.shared_impl.view.ViewDeclarationLanguageBase.restoreView(ViewDeclarationLanguageBase.java:106)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.restoreView(FaceletViewDeclarationLanguage.java:1230)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:240)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> com.sun.facelets.FaceletViewHandler.restoreView(FaceletViewHandler.java:316)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.faces.webflow.FlowViewHandler.restoreFlowView(FlowViewHandler.java:128)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.faces.webflow.FlowViewHandler.restoreView(FlowViewHandler.java:75)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.faces.webflow.JsfViewFactory.getView(JsfViewFactory.java:93)
> > > > > > > >        at
> > > > > > > >
> > > > >
> > org.springframework.webflow.engine.ViewState.resume(ViewState.java:193)
> > > > > > > >        at
> > > > > org.springframework.webflow.engine.Flow.resume(Flow.java:545)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:163)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
> > > > > > > >        at
> > > > > javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
> > > > > > > >        at
> > > > > javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> > > > > > > >        at
> > > > main.util.RendererFilter.doFilter(RendererFilter.java:103)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> > > > > > > >        at
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
> > > > > > > >        at
> > > > > > > >
> > > > >
> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> > > > > > > >        at java.lang.Thread.run(Unknown Source)
> > > > > > > >
> > > > > > > > Is this the "fault" of myfaces or tomahawk? Is it
possible to
> > > > check,
> > > > > if
> > > > > > > the
> > > > > > > > viewId is null, and - if so - create a new one?
> > > > > > > >
> > > > > > > > Any help is appreciated :)
> > > > > > > >
> > > > > > > > Thx, Matthias
> > > > > > > > --
> > > > > > > > GMX DSL: Internet, Telefon und Entertainment für
nur 19,99
> > > > > EUR/mtl.!
> > > > > > > > http://portal.gmx.net/de/go/dsl02
> > > > > > > >
> > > > > >
> > > > > > --
> > > > > > Sicherer, schneller und einfacher. Die aktuellen Internet-Browser
> > -
> > > > > > jetzt kostenlos herunterladen!
> > http://portal.gmx.net/de/go/atbrowser
> > > > > >
> > > >
> > > > --
> > > > GMX DSL: Internet, Telefon und Entertainment für nur 19,99 EUR/mtl.!
> > > > http://portal.gmx.net/de/go/dsl02
> > > >
> > >
>
> --
> Sicherer, schneller und einfacher. Die aktuellen Internet-Browser -
> jetzt kostenlos herunterladen! http://portal.gmx.net/de/go/atbrowser
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message