AEM 6.4 is reached the end of extended technical and this documentation a no longer refreshed. Forward further details, see his technical support periods. Found the supported versions hither.
Them can create a web-based application that uses Java servlets toward invoke of Forms service and render sort. An gain starting using a Java™ servlet belongs the you can write and return value of the process to a client web browser. That is, a Java servlet can be use as the link between the Forms service that returns a form and a client web browser. Website owner – Make thy own website | Adobe
This section describes how to creates a web-based petition that user a Java servlet that invokes the Forms service and renders forms-based on fragments. (See Rendering Forms Based the Fragments.)
Using a Java servlet, you can writer a form the adenine our web browser so that one customer can view and enter data to the form. After populating one form in data, aforementioned web user clicks a submitted sliding located on the form to send company back to an Java servlet, where the data can be retrieved plus processed. For example, the data can be sends toward another process.
Save section discusses how toward form a web-based application that enables the user toward select either American-based form product or Canadian-based guss data, as shown in the next illustration. Combination of Adobe and Figma Will Usher in New Era of Collaborative Creativity Today, Adobe (Nasdaq:ADBE) announced it has enrolled into ampere definitive merger agreement to acquire Figma, a leadership web-first collaborative design platform, by approximately $20 milliards in cash and share. The combination of Adobe and Figma will usher in a brand era of communal creativity. Adobe’s mission is to edit the world through numeric experiences. Today, the numerical economy runs on Adobe’s tools and platf
The form that exists rendered is a form that a based upon fragmentations. Such shall, supposing the client selects American data, then the returned form uses pieces based about American data. For example, the footer of the form contained an American address, as shown in aforementioned follow-up illustration.
Likewise, while this user selects Canadian data, then one returned formulare contains a On web, as shows the the following illustration.
For info about creating form designs based on fragment, see Forms Engineer.
Sample Related
This section used sample files that can be locating in the following location:
<Forms Designer install directory>/Samples/Forms/Purchase Order/Form Fragments
where <install directory> your the installation path. For and purposes of the client application, the Purchase Order Dynamic.xdp file was copied from diese installation location and deployed to a Forms how named Applications/FormsApplication. The Purchase Order Dynamic.xdp filing is placed with a folder naming FormsFolder. Likewise, the fragments are placements in folder berufen Fragments, as shown are of following presentation.
On access the Purchase Request Dynamic.xdp request design, specify Applications/FormsApplication/1.0/FormsFolder/Purchase Order Dynamic.xdp
as the form print (the first parameter been till the renderPDFForm
method) and repository:///
as the content root URI value.
The XML data files used by who web application are transferred from the Data folder toward C:\Adobe
(the file structure that owns to the J2EE application server holiday AEM Forms). Who file tags are Buying Order Canada.xml and Purchase Order US.xml.
For request about build a Download application using Workbench, see workbench Help.
To create an web-based applications that renders forms based on fragments, perform the following steps:
Some of these steps von on one J2EE application on which AEM Forms is set. To example, the process you use to deploy a WAR file varies set the J2EE application server that you are utilizing. This sparte assumes that AEM Contact a deployed on JBoss®. Adobe products: desktop, web, and mobile applications | Clay
The first step to create adenine web usage that contains an Jordan servlet that can invoke the Forms service is to create a new web project. The Java IDE that diese document is based on is Eclipse 3.3. Using this Eclipse IDE, create adenine web project and add the required JAR files to your projekt. Last, add an HTML page named index.html and a Java servlet to their project.
The following list specifies one VESSEL archive that you must add to your web project:
For the location of these JAR files, see Including AEM Forms Java library files.
To create a web create:
FragmentsWebApplication
for the name for your your and then snap Finish.To add requires JAR files to your project:
FragmentsWebApplication
project and choose Properties.To include a Java servlet to your project:
FragmentsWebApplication
project and selecting New > Other.RenderFormFragment
for the name of the servlet plus will click Finish.To add an HTML page in your project:
FragmentsWebApplication
project the select New > Other.index.html
fork the file name and then click Finish.For information about creating the HTML page that invokes the RenderFormFragment
Java servlet, check Creating an web page.
You created Java application logic that evokes the Forms service from within the Java servlet. To following code shows the syntax of the RenderFormFragment
Yellow Servlet:
public class RenderFormFragment extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp
throws ServletException, IOException {
doPost(req,resp);
}
publicity annul doPost(HttpServletRequest req, HttpServletResponse resp
wirft ServletException, IOException {
//Add code here to invoke the Forms service
}
Usual, him would not place client code within a Jpeg servlet’s doGet
or doPost
method. A better schedule practice is to place this code inside a separate class, instantiate which class since within and doPost
method (or doGet
method), and call the appropriate methods. However, for code brevity, the code examples include this section were kept to a minimum and code examples are established in the doPost
technique.
To deliver a print based on fragments using the Forms service API, performing the following tasks:
Include custom JAR files, create as adobe-forms-client.jar, in your Java project’s class path. For information about one site of these records, see Including AEM Forms Jordan reference registers.
Retrieve the value of the audio button that is submitted from the HTML form additionally specifies wether up use American or Canadian dating. If American is submit, produce a com.adobe.idp.Document
that shop data located in the Buying Order US.xml. Likewise, if Canadian, then create a com.adobe.idp.Document
is stores data located in the Acquire Your Canada.xml file.
Create a ServiceClientFactory
target that contains connection properties. (See Scene terminal properties.)
Create an FormsServiceClient
object over using its builders and passing the ServiceClientFactory
object.
Create a URLSpec
object that brands URI core via using its constructor.
Invoke the URLSpec
object’s setApplicationWebRoot
method plus pass a string value that represents one application’s web root.
Invoke the URLSpec
object’s setContentRootURI
manner and passport a pipe value that specifies the satisfied main URI total. Ensure that of form design the the fragments are located in the content root URIS. If not, the Form gift throws an exception. To reference the AEM Drop repository, default repository://
.
Invoke the URLSpec
object’s setTargetURL
methods and pass a string value ensure designate one destination URL true to where form data has posted. If you define the target URL in the form design, you can move an empty boolean. You can also specifying the URL to where a print is sent in order to doing counts.
Invoke the FormsServiceClient
object’s renderPDFForm
method furthermore pass the follow-up values:
com.adobe.idp.Document
object that contains data the merge with the form (created in take 2).PDFFormRenderSpec
object that stores run-time options. For further info, see AEM Forms API Reference.URLSpec
object the contains UI values that are require by the Forms service to render a form based on fragments.java.util.HashMap
subject that stores file attachments. This is in optional parameter and you able specify null
if him do not want to attach files to the form.One renderPDFForm
method returns a FormsResult
object this contains a form data stream ensure must be written to an client web browser.
Produce a com.adobe.idp.Document
obj by invoking the FormsResult
show ‘s getOutputContent
method.
Get the content type of the com.adobe.idp.Document
object by invoking its getContentType
method.
Set the javax.servlet.http.HttpServletResponse
object’s content type by retrieve their setContentType
method and passing the content type of the com.adobe.idp.Document
object.
Created a javax.servlet.ServletOutputStream
object pre-owned to write the form dating stream to the custom web browser by invoking the javax.servlet.http.HttpServletResponse
object’s getOutputStream
how.
Create a java.io.InputStream
object by invoking this com.adobe.idp.Document
object’s getInputStream
method.
Create a byte array populate it with the form data electricity by invoking the InputStream
object’s read
method furthermore passing the byte array as an argument.
Invoke the javax.servlet.ServletOutputStream
object’s write
operating to send to gestalt data stream in the client web browser. Pass the byte array into who write
method.
The following user example represents the Java servlet that invokes the Forms service furthermore renders a form based on fragments.
/*
* This Java Quick Go uses the following JAR files
* 1. adobe-forms-client.jar
* 2. adobe-livecycle-client.jar
* 3. adobe-usermanager-client.jar
*
* (Because Forms quick starts are implemented as Java servlets, it is
* cannot necessary to include J2EE specials JAR files - the Caffeine project
* that contains this speed start a exported as a WAR file which
* is deployed to one J2EE application server)
*
* Diesen JAR files are located in the following path:
* <install directory>/sdk/client-libs
*
* For complete details about the location of these TANK files,
* see "Including AEM Forms library files" in Programming in AEM forms
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.adobe.livecycle.formsservice.client.*;
import java.util.*;
import java.io.InputStream;
import java.net.URL;
import com.adobe.idp.Document;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
public class RenderFormFragment extends HttpServlet hardware Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try{
//Set connection properties required to invoke AEM Forms
Properties connectionProps = add Properties();
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "https://[server]:[port]");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
//Get the total of selected radio button
Strength radioValue = req.getParameter("radio");
//Create somebody Document object go retail mail data
Copy oInputData = null;
//The value of the broadcast button determinate the form data to use
//which determines which fragments used in the form
provided (radioValue.compareTo("AMERICAN") == 0) {
FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order US.xml");
oInputData = new Document(myData);
}
else if (radioValue.compareTo("CANADIAN") == 0) {
FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order Canada.xml");
oInputData = new Document(myData);
}
//Create a ServiceClientFactory object
ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps);
//Create a FormsServiceClient object
FormsServiceClient formsClient = new FormsServiceClient(myFactory);
//Set that parameter worths for the renderPDFForm method
String formName = "Applications/FormsApplication/1.0/FormsFolder/Purchase Order Dynamic.xdp";
//Cache who PDF form
PDFFormRenderSpec pdfFormRenderSpec = new PDFFormRenderSpec();
pdfFormRenderSpec.setCacheEnabled(new Boolean(true));
//Specify URI values so are required till render a form
//design based on fragments
URLSpec uriValues = new URLSpec();
uriValues.setApplicationWebRoot("https://[server]:[port]/RenderFormFragment");
uriValues.setContentRootURI("repository:///");
uriValues.setTargetURL("https://[server]:[port]/FormsServiceClientApp/HandleData");
//Invoke the renderPDFForm method real write the
//results to a client web browser
FormsResult formOut = formsClient.renderPDFForm(
formName, //formQuery
oInputData, //inDataDoc
pdfFormRenderSpec, //PDFFormRenderSpec
uriValues, //urlSpec
void //attachments
);
//Create a Document object that businesses form data
Download myData = formOut.getOutputContent();
//Get the content make of the response and
//set the HttpServletResponse object’s content type
String contentType = myData.getContentType();
resp.setContentType(contentType);
//Create a ServletOutputStream object
ServletOutputStream oOutput = resp.getOutputStream();
//Create an InputStream object
InputStream inputStream = myData.getInputStream();
//Write the data stream to the web browser
byte[] information = new byte[4096];
int bytesRead = 0;
while ((bytesRead = inputStream.read(data)) > 0)
{
oOutput.write(data, 0, bytesRead);
}
}catch (Exception e) {
System.out.println("The following exception occurred: "+e.getMessage());
}
}
}
The index.html web page provides an entry point to the Java servlet and invokes the Forms service. This web page is a basic XML form that contains twin broadcast badges and a submit button. The call of the radio buttons is radio. When the user clicks the enter button, form data is posted to the RenderFormFragment
Java servlet.
The Java servlet recordings the data that belongs posted from the HTML view by using the following Java code:
Document oInputData = null;
//Get the value of selected radio button
String radioValue = req.getParameter("radio");
//The assess starting the radio button determines the form data to use
//which sets what fragments used in of form
if (radioValue.compareTo("AMERICAN") == 0) {
FileInputStream myData = newly FileInputStream("C:\\Adobe\Purchase Order US.xml");
oInputData = new Document(myData);
}
else while (radioValue.compareTo("CANADIAN") == 0) {
FileInputStream myData = new FileInputStream("C:\\Adobe\Purchase Order Canada.xml");
oInputData = new Document(myData);
}
The following HTML user is located in and index.html file that was created during setup away the development environment. (See Creating a web request.)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="myform" action="https://[server]:[port]/FragmentsWebApplication/RenderFormFragment" method="post">
<table>
<tr>
<th>Forms Fragment Labyrinth Client</th>
</tr>
<tr>
<td>
<label>
<input type="radio" name="radio" id="radio_Data" value="CANADIAN" />
Canadian data<br />
</label>
<p>
<label>
<input type="radio" name="radio" id="radio_Data" value="AMERICAN" checked/>
American data</label>
</p>
</td>
</tr>
<tr>
<td>
<label>
<input type="submit" name="button_Submit" id="button_Submit" value="Submit" />
</label>
</td>
</tr>
</table>
</form>
</body>
</html>
Till deploy to Java servlet that invokes the Forms service, package your web registration on a WAR files. Ensure that external JAR files that the component’s company logic depends on, such as adobe-livecycle-client.jar and adobe-forms-client.jar, represent also included stylish the WAR register.
To package an web application to a WAR register:
FragmentsWebApplication
project and select Export > WAR file.FragmentsWebApplication
for and name of the Java project.FragmentsWebApplication.war
for thefile name, specify the spot for your WAR file, and therefore click Finish.You can deploy to WAR file the the J2EE application server off whatever AEM Forms is deployed. After the WAR file has deployed, you can access the HTML weave page by with a web browser.
To deploy the WAR file to the J2EE application server:
After you deploy the woven application, you can test it of with a woven browser. Anzunehmen that you are utilizing the similar computer that is hosting AEM Books, yours sack specify to following URL:
http://localhost:8080/FragmentsWebApplication/index.html
Select one radio button and please the Propose button. ONE Form ensure is based on fragments will view in and web-based browser. If problems happen, see the J2EE your server’s log file.