URL with media protocol in web client

Hi all,

I have a plugin which uses images coming from the media “repository”.
What it does is that it creates a URL from the name of the file that is given by the user, so the code, very basic is:
URL url = new URL(“media:///” + medianame);

Now this code works fine in developper for my plugin, when used in smart or web client.
When I put it on a real server though, the code still works fine in smart client, but for the web client a MalformedURLException is throwed:
java.net.MalformedURLException: unknown protocol: media

Note that the code hasn’t changed and is working well in the plugin used by a web client when the web client is launched from developer. Not so on a real server. That’s the only difference. So I suspect that the code that installs your URL protocol ‘media’ handler is not initialized correctly on the server, or in any case that a plugin used by web client has no access to it.
This is Servoy 5.1.1 on Windows.

I will file a case with a simple plugin example soon. Please have a look at it.

Case #281540 created

Hi Patrick was this solved?

I have this code in a calculated field, shown in a field of IMAGE_MEDIA displayType in a list view, to display the adobe icon if print_history_id has a value

function button_display()
{
	var mediaName = "Forward.gif"
	if(print_history_id)
		mediaName = "adobe16red.gif"
	var r = "media:///" + mediaName
	return plugins.http.getMediaData(r)
}

It works in developer and on the server in SC but not WC. Here’s the error log. This is Servoy 5.2.8 on a Windows server

2011-05-24 23:20:57,094 ERROR [http-443-4] com.servoy.j2db.util.Debug - Throwable
java.net.MalformedURLException: unknown protocol: media
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at com.servoy.extensions.plugins.http.HttpProvider.js_getMediaData(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:179)
	at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:353)
	at com.servoy.j2db.scripting.RecordingFunction.call(RecordingFunction.java:40)
	at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:3666)
	at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:2680)
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:166)
	at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:387)
	at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3135)
	at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:165)
	at com.servoy.j2db.scripting.ScriptEngine.executeFunction(ScriptEngine.java:476)
	at com.servoy.j2db.scripting.TableScope.getCalculationValue(TableScope.java:191)
	at com.servoy.j2db.scripting.TableScope.getCalculationValue(TableScope.java:214)
	at com.servoy.j2db.dataprocessing.FoundSet.getCalculationValue(FoundSet.java:2567)
	at com.servoy.j2db.dataprocessing.Record.getValue(Record.java:181)
	at com.servoy.extensions.beans.dbtreeview.BindingInfo.getIcon(Unknown Source)
	at com.servoy.extensions.beans.dbtreeview.FoundSetTreeModel$UserNode.getIcon(Unknown Source)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeViewNode.newImageComponent(Unknown Source)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeViewNode.addComponents(Unknown Source)
	at org.apache.wicket.markup.html.tree.LabelIconPanel.<init>(LabelIconPanel.java:50)
	at org.apache.wicket.markup.html.tree.LinkIconPanel.<init>(LinkIconPanel.java:43)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeViewNode.<init>(Unknown Source)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeView$6.<init>(Unknown Source)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeView.newNodeComponent(Unknown Source)
	at org.apache.wicket.markup.html.tree.BaseTree.populateTreeItem(BaseTree.java:112)
	at org.apache.wicket.markup.html.tree.AbstractTree$TreeItem.<init>(AbstractTree.java:136)
	at org.apache.wicket.markup.html.tree.AbstractTree.newTreeItem(AbstractTree.java:1549)
	at org.apache.wicket.markup.html.tree.AbstractTree.buildTreeItems(AbstractTree.java:1225)
	at org.apache.wicket.markup.html.tree.AbstractTree.buildItemChildren(AbstractTree.java:1194)
	at org.apache.wicket.markup.html.tree.AbstractTree.onBeforeRenderInternal(AbstractTree.java:642)
	at org.apache.wicket.markup.html.tree.AbstractTree.onBeforeRender(AbstractTree.java:657)
	at com.servoy.extensions.beans.dbtreeview.WicketDBTreeView.onBeforeRender(Unknown Source)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at com.servoy.j2db.server.headlessclient.dataui.WebDataRenderer.onBeforeRender(WebDataRenderer.java:407)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at com.servoy.j2db.server.headlessclient.WebForm.onBeforeRender(WebForm.java:1658)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at com.servoy.j2db.server.headlessclient.dataui.WebTabPanel.onBeforeRender(WebTabPanel.java:524)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at com.servoy.j2db.server.headlessclient.dataui.WebDataRenderer.onBeforeRender(WebDataRenderer.java:407)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at com.servoy.j2db.server.headlessclient.WebForm.onBeforeRender(WebForm.java:1658)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.markup.repeater.AbstractRepeater.onBeforeRender(AbstractRepeater.java:151)
	at com.servoy.j2db.server.headlessclient.MainPage$15.onBeforeRender(MainPage.java:662)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.markup.html.form.Form.onBeforeRender(Form.java:2056)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1753)
	at org.apache.wicket.Component.onBeforeRender(Component.java:3950)
	at org.apache.wicket.Page.onBeforeRender(Page.java:1550)
	at com.servoy.j2db.server.headlessclient.MainPage.onBeforeRender(MainPage.java:948)
	at org.apache.wicket.Component.internalBeforeRender(Component.java:1065)
	at org.apache.wicket.Component.beforeRender(Component.java:1099)
	at org.apache.wicket.Component.prepareForRender(Component.java:2282)
	at org.apache.wicket.Page.prepareForRender(Page.java:1540)
	at org.apache.wicket.Component.prepareForRender(Component.java:2319)
	at org.apache.wicket.Page.renderPage(Page.java:911)
	at org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:63)
	at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
	at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258)
	at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
	at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
	at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
	at com.servoy.j2db.server.servlets.Zl.doGet(Zl.java:10)
	at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	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:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	at java.lang.Thread.run(Unknown Source)

Yes, it was solved. And the fix is part of Servoy 5.1.x and Servoy 5.2.x.

But you will have to use a different constructor for URL, see URL (Java Platform SE 6)
You will be able to get a URLStreamHandler from IClientPluginAccess.getMediaURLStreamHandler(), the rest you can construct from the media reference String you have.

for 6 i fixed the http plugin getMediaData() that it uses that mediastreamhandler:

https://www.servoyforge.net/projects/se … sions/3289

Thanks Johan,

In 5.2.8 is there anything I can do to get this code working?

function button_display()
{
   var mediaName = "Forward.gif"
   if(print_history_id)
      mediaName = "adobe16red.gif"
   var r = "media:///" + mediaName
   return plugins.http.getMediaData(r)
}
	var mediaName = "Forward.gif"
	if(print_history_id)
		mediaName = "adobe16red.gif"
	return solutionModel.getMedia(mediaName).bytes;

That did the trick
thanks*10^6