[JAVA] Créer une API XML-RPC avec Wicket

environnement

Contexte

Je veux faire du XML-RPC avec Wicket!

Préparer une page pour recevoir XML-RPC

XmlRpcPage.java


public class XmlRpcPage extends WebPage {

	private static final long serialVersionUID = 1L;

	public XmlRpcPage(PageParameters params) {
		super(params);
		setStatelessHint(true);
		Session.get().bind();

		HttpServletRequest request = (HttpServletRequest)getRequestCycle().getRequest().getContainerRequest();
		HttpServletResponse response = (HttpServletResponse)getRequestCycle().getResponse().getContainerResponse();

		getRequestCycle().replaceAllRequestHandlers(new IRequestHandler() {

			@Override
			public void respond(IRequestCycle requestCycle) {
				try {
					processXmlRpcRequest(request, response);
				} catch (ServletException | IOException e) {
					throw new WicketRuntimeException(e);
				}
			}

			@Override
			public void detach(IRequestCycle requestCycle) {

			}

		});
	}

	/**
	 * Get XML-RPC server
	 * @return
	 */
	protected XmlRpcServletServer getXmlRpcServer() {
		return ((WicketApplication)getApplication()).getXmlRpcServer();
	}

	/**
	 * Process XML-RPC request
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void processXmlRpcRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		getXmlRpcServer().execute(request, response);
	}

	@Override
	public Markup getAssociatedMarkup() {
		return null;
	}

	@Override
	protected void configureResponse(WebResponse response) {
		final String encoding = getApplication().getRequestCycleSettings().getResponseRequestEncoding();
		response.setContentType("application/xhtml+xml; charset=" + encoding);
	}
}

Paramètres de l'application Wicket

WicketApplication.java



	protected XmlRpcServletServer xmlRpcServer	= null;
	protected XmlRpcServerConfigImpl xmlRpcConfig	= null;

        //constructeur
	public WicketApplication() {
		super();
		xmlRpcServer = new XmlRpcServletServer();
		xmlRpcConfig = new XmlRpcServerConfigImpl();
	}

WicketApplication.java


	/*
	 * Initialize xmlrpc server
	 */
	public void initXmlRpc() {

		/* configure xml-rpc server */
		xmlRpcServer.setTypeFactory(new CustomTypeFactory(xmlRpcServer));

		//CustomTypeConverterFactory est Xml-Usine pour la conversion de type avec Rpc
		xmlRpcServer.setTypeConverterFactory(new CustomTypeConverterFactory());

		xmlRpcConfig = (XmlRpcServerConfigImpl)this.xmlRpcServer.getConfig();
		xmlRpcConfig.setBasicEncoding(XmlRpcConfigImpl.UTF8_ENCODING);
		xmlRpcConfig.setEnabledForExceptions(true);
		xmlRpcConfig.setEnabledForExtensions(true);

		PropertyHandlerMapping mapping = createXmlRpcHandlerMapping();
		this.xmlRpcServer.setHandlerMapping(mapping);
	}

WicketApplication.java


	/**
	 * XML-Génération de carte de gestionnaire de propriétés pour RPC
	 * @return
	 */
	private PropertyHandlerMapping createXmlRpcHandlerMapping() {

		PropertyHandlerMapping mapping = new PropertyHandlerMapping();
		mapping.setRequestProcessorFactoryFactory(new StatelessProcessorFactoryFactory());
		mapping.setTypeConverterFactory(new CustomTypeConverterFactory());
		try {
			mapping.load(getClass().getClassLoader(), "xmlrpc.properties");
		} catch (XmlRpcException | IOException e) {
			StringWriter sw = new StringWriter();
			e.printStackTrace(new PrintWriter(sw));
			logger.error("ERROR:\n"+sw.toString());
			throw new WicketRuntimeException(e);
		}
		return mapping;
	}

xmlrpc.properties


SampleService=my.api.xmlrpc.service.impl.SampleServiceImpl

WicketApplication.java


		// initialize XML-RPC
		initXmlRpc();

WicketApplication.java


		// xml-rpc base
		mount(new MountedMapper("/XmlRpc", XmlRpcPage.class));

appel

TestSampleXmlRpc.java


	public static void main(String[] args) throws Exception {
		
		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
		config.setServerURL(new URL("http://localhost:8080/sample/XmlRpc"));
		config.setEnabledForExtensions(true);
		config.setEnabledForExceptions(true);

		XmlRpcClient client = new XmlRpcClient();
		client.setTransportFactory(new XmlRpcLoggingTransportFactory(client));
		client.setTypeFactory(new CustomTypeFactory(client));
		client.setConfig(config);

		Vector<Object> arg = new Vector<Object>();
		arg.add("some.parameter");

		Object response = client.execute("SampleService.sampleMethod", arg);
		System.out.println("Response: " + response);
	}

Autre

Si vous avez des questions, n'hésitez pas à nous contacter. Pour la gestion des erreurs, essayez ~ catch intercepte tout et renvoie le résultat sous forme de valeur de retour. (Je pensais l'écrire plus tard, mais ce n'est pas quelque chose que j'ai pris la peine d'écrire ...)

Recommended Posts

Créer une API XML-RPC avec Wicket
Créez une API JSON prenant en charge le cryptage RSA avec wicket
Créez des spécifications API intéressantes avec Micronaut + Swagger UI
Créer un serveur API Web avec Spring Boot
Essayez de créer avec Trailblazer
Tester l'API Web avec junit
Évitez la sérialisation des pages avec Wicket
Utiliser l'API Bulk avec RestHighLevelClient
Créez un terrain de jeu avec Xcode 12
Créer un SlackBot avec AWS lambda et API Gateway en Java
Test de l'API REST avec REST Assured
Lier l'API avec Spring + Vue.js
Créer un micro service avec Spring Boot
Créez une application de recherche de restaurant avec l'API IBM Watson + Guru Navi (avec source)
Créer une classe immuable avec JAVA
Créez un environnement Vue3 avec Docker!
Créer un PDF avec la mise en page itext7-Free: Texte-
Spring avec Kotorin - 4 Conception d'API REST
Test API automatique avec Selenium + REST-Assured
Créez une application avec Spring Boot 2
Test de l'API REST à l'aide de REST Assured Part 2
Créez un PDF avec la mise en page itext7-Free:
Créer une fonction de pagination avec Rails Kaminari
Micro benchmark réalisé avec l'API JFR
Créer un environnement de vérification SolrCloud avec Docker
Créer un fichier Excel avec POI
Créez une alternative à l'API Stream facile à étendre
Créez une application avec Spring Boot
Créez deux DatePickers liés à TextField
Créer une application en ligne de commande avec maven
Créez un PDF avec itext7 ~ HelloWorld ~
Créer ma page avec Rails
Créez des exceptions avec une interface fluide
FileUpload avec Rest sur Apache Wicket