[JAVA] Erstellen Sie eine XML-RPC-API mit Wicket

Umgebung

Hintergrund

Ich möchte XML-RPC mit Wicket machen!

Bereiten Sie eine Seite für den Empfang von XML-RPC vor

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);
	}
}

Wicket-Anwendungseinstellungen

WicketApplication.java



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

        //Konstrukteur
	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 ist XML-Fabrik zur Typumwandlung mit 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-Generierung der Property-Handler-Map für 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));

Anruf

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);
	}

Andere

Wenn Sie Fragen haben, können Sie sich gerne an uns wenden. Versuchen Sie zur Fehlerbehandlung ~ catch fängt alles ab und gibt das Ergebnis als Rückgabewert zurück. (Ich dachte, ich würde es später schreiben, aber ich habe mir nicht die Mühe gemacht zu schreiben ...)

Recommended Posts

Erstellen Sie eine XML-RPC-API mit Wicket
Erstellen Sie eine JSON-API, die die RSA-Verschlüsselung mit Wicket unterstützt
Erstellen Sie eine coole API-Spezifikation mit Micronaut + Swagger UI
Erstellen Sie einen Web-API-Server mit Spring Boot
Versuchen Sie es mit Trailblazer
Testen Sie die Web-API mit junit
Vermeiden Sie die Serialisierung von Seiten mit Wicket
Verwenden Sie die Bulk-API mit RestHighLevelClient
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
REST-API-Test mit REST Assured
API mit Spring + Vue.js verknüpfen
Erstellen Sie mit Spring Boot einen Mikrodienst
Erstellen Sie eine Restaurant-Such-App mit der IBM Watson + Guru Navi-API (mit Quelle).
Erstellen Sie mit JAVA eine unveränderliche Klasse
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie PDF mit itext7-freiem Layout: Text-
Feder mit Kotorin --4 REST API Design
Automatischer API-Test mit Selen + REST-Assured
Erstellen Sie eine App mit Spring Boot 2
REST-API-Test mit REST Assured Part 2
Erstellen Sie PDF mit itext7-freiem Layout: Tabelle-
Mikro-Benchmark mit JFR-API
Erstellen Sie mit Docker eine SolrCloud-Überprüfungsumgebung
Erstellen Sie eine Excel-Datei mit poi
Erstellen Sie eine einfach zu erweiternde Stream-API-Alternative
Erstellen Sie eine App mit Spring Boot
Erstellen Sie zwei DatePicker, die mit TextField verknüpft sind
Erstellen Sie eine Befehlszeilen-App mit maven
Erstellen Sie PDF mit itext7 ~ HelloWorld ~
Erstellen Sie meine Seite mit Rails
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
FileUpload mit Rest auf Apache Wicket
Erstellen Sie ein Maven-Projekt mit Befehlen