You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by kuro <96...@gmail.com> on 2016/02/27 00:57:04 UTC

RestSwaggerProcessor causes NullPointerException

Camel ver : 2.16.2

RestSwaggerProcessor causes NullPointerException when I access
`http://localhost:8888/api/api-doc`

error log 
----------------------------------
[Camel (camel-1) thread #0 - NettyEventExecutorGroup] WARN
org.apache.camel.swagger.RestSwaggerProcessor - Error rendering Swagger API
due null
java.lang.NullPointerException
	at
org.apache.camel.swagger.RestSwaggerReader$VerbOrdering.compare(RestSwaggerReader.java:358)
	at
org.apache.camel.swagger.RestSwaggerReader$VerbOrdering.compare(RestSwaggerReader.java:339)
	at java.util.TimSort.binarySort(TimSort.java:292)
	at java.util.TimSort.sort(TimSort.java:217)
	at java.util.Arrays.sort(Arrays.java:1512)
	at java.util.ArrayList.sort(ArrayList.java:1454)
	at java.util.Collections.sort(Collections.java:175)
	at
org.apache.camel.swagger.RestSwaggerReader.parse(RestSwaggerReader.java:94)
	at
org.apache.camel.swagger.RestSwaggerReader.read(RestSwaggerReader.java:83)
	at
org.apache.camel.swagger.RestSwaggerSupport.renderResourceListing(RestSwaggerSupport.java:191)
	at
org.apache.camel.swagger.RestSwaggerProcessor.process(RestSwaggerProcessor.java:95)
	at
org.apache.camel.component.rest.RestApiProducer.process(RestApiProducer.java:36)
	at
org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
	at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
	at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
	at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
	at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
	at
org.apache.camel.component.netty4.handlers.ServerChannelHandler.processAsynchronously(ServerChannelHandler.java:138)
	at
org.apache.camel.component.netty4.handlers.ServerChannelHandler.channelRead0(ServerChannelHandler.java:109)
	at
org.apache.camel.component.netty4.http.handlers.HttpServerChannelHandler.channelRead0(HttpServerChannelHandler.java:211)
	at
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at
org.apache.camel.component.netty4.http.handlers.HttpServerMultiplexChannelHandler.channelRead0(HttpServerMultiplexChannelHandler.java:113)
	at
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
	at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
	at
io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:42)
	at
io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:309)
	at
io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:36)
	at
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
	at java.lang.Thread.run(Thread.java:745)

----------------------------------

Here is my code.

    @Override
    public void configure() throws Exception {
        
restConfiguration().component("netty4-http").bindingMode(RestBindingMode.json)
                .enableCORS(true)
                .contextPath("/api").port(8888).host("localhost")
                .endpointProperty("mapHeaders", "true")
                .endpointProperty("urlDecodeHeaders", "true")
                .apiContextPath("/api-doc")
                .apiProperty("cors", "true");

        rest("/api")

                .get()
                     .to("direct:get")
                .put()
                    .to("direct:put")
                .delete()
                    .description("del", "del", "")
                    .to("direct:del")
                .options()
                      .to("direct:options");
     }

-----------------

I found ModelHelper class makes incorrect Xml.

org.apache.camel.model.ModelHelper
public static String dumpModelAsXml(......)

return value
---------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rests xmlns="http://camel.apache.org/schema/spring">
    <rest path="/api">
        <get routeId="route1">
            <to uri="direct:get" customId="true" id="route1"/>
        </get>
        <put  routeId="route2">
            <to uri="direct:put" customId="true" id="route2"/>
        </put>
        <delete routeId="del" customId="true" id="del">
            <to uri="direct:del" customId="true" id="del"/>
        </delete>
        <verb routeId="route3">
            <to uri="direct:options" customId="true" id="route3"/>
        </verb>
    </rest>
</rests>




--
View this message in context: http://camel.465427.n5.nabble.com/RestSwaggerProcessor-causes-NullPointerException-tp5778340.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: RestSwaggerProcessor causes NullPointerException

Posted by Claus Ibsen <cl...@gmail.com>.
Try with 2.16.3-SNAPSHOT.

It works on the upcoming 2.17 release.

On Sat, Feb 27, 2016 at 12:57 AM, kuro <96...@gmail.com> wrote:
> Camel ver : 2.16.2
>
> RestSwaggerProcessor causes NullPointerException when I access
> `http://localhost:8888/api/api-doc`
>
> error log
> ----------------------------------
> [Camel (camel-1) thread #0 - NettyEventExecutorGroup] WARN
> org.apache.camel.swagger.RestSwaggerProcessor - Error rendering Swagger API
> due null
> java.lang.NullPointerException
>         at
> org.apache.camel.swagger.RestSwaggerReader$VerbOrdering.compare(RestSwaggerReader.java:358)
>         at
> org.apache.camel.swagger.RestSwaggerReader$VerbOrdering.compare(RestSwaggerReader.java:339)
>         at java.util.TimSort.binarySort(TimSort.java:292)
>         at java.util.TimSort.sort(TimSort.java:217)
>         at java.util.Arrays.sort(Arrays.java:1512)
>         at java.util.ArrayList.sort(ArrayList.java:1454)
>         at java.util.Collections.sort(Collections.java:175)
>         at
> org.apache.camel.swagger.RestSwaggerReader.parse(RestSwaggerReader.java:94)
>         at
> org.apache.camel.swagger.RestSwaggerReader.read(RestSwaggerReader.java:83)
>         at
> org.apache.camel.swagger.RestSwaggerSupport.renderResourceListing(RestSwaggerSupport.java:191)
>         at
> org.apache.camel.swagger.RestSwaggerProcessor.process(RestSwaggerProcessor.java:95)
>         at
> org.apache.camel.component.rest.RestApiProducer.process(RestApiProducer.java:36)
>         at
> org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
>         at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)
>         at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
>         at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
>         at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
>         at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
>         at
> org.apache.camel.component.netty4.handlers.ServerChannelHandler.processAsynchronously(ServerChannelHandler.java:138)
>         at
> org.apache.camel.component.netty4.handlers.ServerChannelHandler.channelRead0(ServerChannelHandler.java:109)
>         at
> org.apache.camel.component.netty4.http.handlers.HttpServerChannelHandler.channelRead0(HttpServerChannelHandler.java:211)
>         at
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
>         at
> org.apache.camel.component.netty4.http.handlers.HttpServerMultiplexChannelHandler.channelRead0(HttpServerMultiplexChannelHandler.java:113)
>         at
> io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
>         at
> io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
>         at
> io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:42)
>         at
> io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:309)
>         at
> io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:36)
>         at
> io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
>         at java.lang.Thread.run(Thread.java:745)
>
> ----------------------------------
>
> Here is my code.
>
>     @Override
>     public void configure() throws Exception {
>
> restConfiguration().component("netty4-http").bindingMode(RestBindingMode.json)
>                 .enableCORS(true)
>                 .contextPath("/api").port(8888).host("localhost")
>                 .endpointProperty("mapHeaders", "true")
>                 .endpointProperty("urlDecodeHeaders", "true")
>                 .apiContextPath("/api-doc")
>                 .apiProperty("cors", "true");
>
>         rest("/api")
>
>                 .get()
>                      .to("direct:get")
>                 .put()
>                     .to("direct:put")
>                 .delete()
>                     .description("del", "del", "")
>                     .to("direct:del")
>                 .options()
>                       .to("direct:options");
>      }
>
> -----------------
>
> I found ModelHelper class makes incorrect Xml.
>
> org.apache.camel.model.ModelHelper
> public static String dumpModelAsXml(......)
>
> return value
> ---------------------------
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <rests xmlns="http://camel.apache.org/schema/spring">
>     <rest path="/api">
>         <get routeId="route1">
>             <to uri="direct:get" customId="true" id="route1"/>
>         </get>
>         <put  routeId="route2">
>             <to uri="direct:put" customId="true" id="route2"/>
>         </put>
>         <delete routeId="del" customId="true" id="del">
>             <to uri="direct:del" customId="true" id="del"/>
>         </delete>
>         <verb routeId="route3">
>             <to uri="direct:options" customId="true" id="route3"/>
>         </verb>
>     </rest>
> </rests>
>
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.com/RestSwaggerProcessor-causes-NullPointerException-tp5778340.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2