/swagger-resources/configuration/ui 404 error - spring-mvc

I'm running in springfox v2.7.0 in my java spring based application. We have 3 dispatch serverlets configured in web.xml:
1)common springmvc servlet [Active]
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/config/common/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>`
2 ) springmvc-v1 servlet [inactive]: which is disabled by commenting out it in web.xml and not in use.
<servlet>
<servlet-name>springmvc-v1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
com.test.mywebservices.v1.config.WebConfig
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
3)springmvc-v2 servlet [Active]: for this I am implimenting swagger.
<servlet>
<servlet-name>springmvc-v2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
com.test.mywebservices.v2.config.WebConfig
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-v2</servlet-name>
<url-pattern>/v2/*</url-pattern>
</servlet-mapping>
And it works fine, and i can get to the swagger-resources from here:
https://localhost:9002/mywebservices/v2/swagger-resources
And i can view the api from here:
https://localhost:9002/mywebservices/v2/v2/api-docs
And Swagger-UI is accessible from here:
https://localhost:9002/mywebservices/swagger-ui.html
The problem is when i load the https://localhost:9002/mywebservices/swagger-ui.html page it is trying to access the swagger-resources from here:
https://localhost:9002/mywebservices/swagger-resources
And they are not available. But it is available at https://localhost:9002/mywebservices/v2/swagger-resources
How can i fix this so that the swagger-ui.html :
I think Swagger-ui.html should be available at: https://localhost:9002/mywebservices/v2/swagger-ui.html so that springfox.js will get the right baseUrl.
https://localhost:9002/mywebservices/swagger-ui.html >>> pages loads but gives popup to enter the Base URL
https://localhost:9002/mywebservices/swagger-resources/configuration/ui >>> gives 404 hence popup appears
https://localhost:9002/mywebservices/webjars/springfox-swagger-ui/springfox.js >>> Able to access.This is working fine.
Please suggest the solution.
Thanks in advance.

I was facing the same problem.
The solution was to map on the MVC config of your app, manually the Controller managing the mapping of swagger-resources that exists on swagger-common.jar. The package value is "springfox.documentation.swagger.web". The configuration, depending on your app, should look similar that the one shown below:
#Configuration
#EnableWebMvc
#ComponentScan(basePackages = { ApplicationPackages.REST_CONTROLLER_BASE_PACKAGE,
"springfox.documentation.swagger.web" })
public class MvcConfig extends WebMvcConfigurerAdapter {
}

Related

How to add swagger in existing servlet project

I want to add swagger to an existing servlet project and I have done my web.xml as shown
<servlet>
<servlet-name>DefaultServletConfig</servlet-name>
<servlet-class>io.swagger.servlet.config.DefaultServletConfig</servlet-class>
<init-param>
<param-name>swagger.resource.package</param-name>
<param-value>bsnl.inbound</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/comm</param-value>
</init-param>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>ApiDeclarationServlet</servlet-name>
<servlet-class>io.swagger.servlet.listing.ApiDeclarationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ApiDeclarationServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
It is working for only one class in a package and only for the GET method, it is not calling the post method. But I want to configure for multiple packages.
If anyone having any idea, please help me.

<context-param> in java based configuration

Below is the web.xml of my project.
<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/applicationContext-service.xml /WEB-INF/config/applicationContext-dao.xml </param-value> </context-param> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/servlet-context.xml ***/WEB-INF/config/applicationContext.xml*** </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> </web-app>
If I want to convert my project into java based configuration, I know that webapplicationcontext can be configured by using AbstractAnnotationConfigDispatcherServletInitializer or webapplicationinitializer.
But how can i configure context-param using java configuration ?
What you can do is you can use servlet context to store the param name and param values by using setattribute and getattribute methods of servlet context by which you can acess them any where throughout your application and check this for more clarification.
https://www.javatpoint.com/servletcontext

HDIV parameter do not exist

I am trying to integrate HDIV with my web application using HDIV struts 1.jar
I encounter the below error when trying to load the login page.
(self-tuning)'][][](org.hdiv.logs.Logger) - HDIV_PARAMETER_DOES_NOT_EXIST;/abc/def/index.do;_HDIV_STATE_;;;127.0.0.1;127.0.0.1;anonymous;
Possible checks I did:
tried with addition of struts--el tag lib with HDIV--el tag lib
tried with filter mapping pattern to all url
Not sure where I am going wrong. Many searches do not provide me a proper solution. Any guidance is highly appreciated. Thank you
Here are my config files.
hdiv-config.xml. I named it as struts-config-hdiv.xml
<hdiv:config excludedExtensions="css,png,gif,jpg,html,js" protectedExtensions=".*.do">
</hdiv:config>
<hdiv:config>
<hdiv:startPages>/index.html</hdiv:startPages>
<hdiv:startPages>/fsm/efsm/index.do</hdiv:startPages>
</hdiv:config>
<hdiv:config errorPage="/fsm/jsp/tiles/common/ErrorPage.jsp">
<hdiv:startPages>/index.html</hdiv:startPages>
<hdiv:startPages>/fsm/efsm/index.do</hdiv:startPages>
</hdiv:config>
<hdiv:editableValidations registerDefaults="true">
<hdiv:validationRule url=".*"></hdiv:validationRule>
</hdiv:editableValidations>
<hdiv:config showErrorPageOnEditableValidation="true">
</hdiv:config>
<hdiv:config maxPagesPerSession="5">
</hdiv:config>
<hdiv:config avoidValidationInUrlsWithoutParams="true">
</hdiv:config>
`
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/struts-config/struts-config-hdiv.xml</param-value>
</context-param>
<filter>
<filter-name>ValidatorFilter</filter-name>
<filter-class>org.hdiv.filter.ValidatorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ValidatorFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.hdiv.listener.InitListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config/struts-config-default.xml
</param-value>
</init-param>
<init-param>
<param-name>config/hdiv</param-name>
<param-value>
/WEB-INF/struts-config/struts-config-hdiv.xml
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>validating</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/hdiv-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/hdiv-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/hdiv-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-html-el.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/hdiv-html-el.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/tld/struts-logic-el.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/hdiv-logic-el.tld</taglib-location>
</taglib>
`
pom.xml
<dependency>
<groupId>org.hdiv</groupId>
<artifactId>hdiv-config</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.hdiv</groupId>
<artifactId>hdiv-struts-1</artifactId>
<version>3.3.0</version>
</dependency>
According to your post I see two possible solutions:
You must process the reported URL at server side using the custom tags offered by Struts 1 to render linksr. In that way Hdiv will include the additional hdiv parameter.
If the URL is a start page (the entry point to the application) where the user starts the browsing (in that case you are not rendering the link) you must define a start page within Hdiv configuration.
<hdiv:config>
<hdiv:startPages>XXX the URL XX</hdiv:startPages>
Regards,
Roberto Velasco (Hdiv Security)

Weblogic 12c versions, servlet failed to preload

Been scratching my head for about a day, I'd really appreciate any help.
Using Weblogic 12c version 12.2.1 and Jersey 1.19 everything is OK
Using Weblogic 12c version 12.1.3 I'm getting this error:
Servlet:"ServletAdaptor" failed to preload on startup in Web application: "PapWeb".java.lang.ArrayIndexOutOfBoundsException:
65281
Edit: I also see this related(?) warning when running the 12.1.3 server:
The application is using ServletContainerInitializer class
com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer
that is loaded
from:file:/D:/servers/wls12130/oracle_common/modules/jersey-servlet-1.18.jar.
This initializer overrides the one available in the system.
WEB_INF/lib includes those jars:
jersey-1.19
jersey-core-1.19
jersey-multipart-1.19
My web.xml has:
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>gr.modas.core.bussiness.services</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.server.provider.packages</param-name>
<param-value>gr.modas.core.bussiness.services</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>gr.modas.core.bussiness.services.PapyrosRequestFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
The code below (in weblogic.xml) solved the issue...
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<container-descriptor>
<prefer-web-inf-classes>**true**</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

RDSDispatchServlet is not available

I have web.xml as follows
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>HibDemo</display-name>
<description>HibDemo Application</description>
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>RDSDispatchServlet</servlet-name>
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>messageBrokerId</param-name>
<param-value>_messageBroker</param-value>
</init-param>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<servlet-mapping id="RDS_DISPATCH_MAPPING">
<servlet-name>RDSDispatchServlet</servlet-name>
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
<!-- for WebSphere deployment, please uncomment -->
<!--
<resource-ref>
<description>Flex Messaging WorkManager</description>
<res-ref-name>wm/MessagingWorkManager</res-ref-name>
<res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
-->
I have downloaded blazeds3.3 and copied all the lib files my lib folder and added the above web.xml file.
Then I have created the Flex 4 project with BlazeDS support. it has been created without any error. Then I have added the datagrid in the code. While using data-centric driven feature of flex 4 it is asking me username and password. I have checked "No Password Require"
Then it gives me Error Like
Error Executing RDS command. Status code 404, Reason: Servlet RDSDispatchServlet is not available
Please help me.
It looks like the RDS stuff isn't in BlazeDS 3.3. As far as I can see, its v4 and above.
So your server is likely not starting the servlet due to the class not being found on the classpath.

Resources