Then you have to modify the java security policy file. There is not 
another option.


Howard
Howard Greenberg, CPA
IBM Certified Application Developer/Instructor - IBM Notes and Domino
The Learning Continuum Company, Ltd.
888-241-8522 or 561-953-0096
http://www.tlcc.com
mailto:[email protected]



From:   Tolen Miller <[email protected]>
To:     [email protected]
Date:   08/27/2015 01:18 PM
Subject:        Re: Cannot load pre existing PDF to access fields



No XPages development, unfortunately. I had the jar in the Agent
originally, but was met with some instability issues (jar kept
disappearing). After reading around a bit, saw that it could be placed in
the nsf so I stuck it there.  Then I spent a few hours on the phone with
IBM trying to figure out another issue I was having with this
implementation and they suggested I move it to the lib/ext folder...

On Thu, Aug 27, 2015 at 10:07 AM <[email protected]> wrote:

> Are you using your Notes/Domino app with XPages? If so, if you import 
the
> jar file into the nsf instead of copying to the jvm\lib folder you won't
> have this issue.
>
>
> Howard
> Howard Greenberg, CPA
> IBM Certified Application Developer/Instructor - IBM Notes and Domino
> The Learning Continuum Company, Ltd.
> 888-241-8522 or 561-953-0096
> http://www.tlcc.com
> mailto:[email protected]
>
>
>
> From:   Tolen Miller <[email protected]>
> To:     [email protected]
> Date:   08/27/2015 11:55 AM
> Subject:        Re: Cannot load pre existing PDF to access fields
>
>
>
> I was able to reach out to IBM for some help here. To update for
> posterity:
> If anyone else runs across this issue while using Lotus/Domino
> environment,
> locate the java.policy file in both the Domino and Notes file paths by
> drilling down to "jvm\lib\security" folders. Edit both of the 
java.policy
> files to add the line:
> *permission java.lang.reflect.ReflectPermission
> "suppressAccessChecks","";*
> to the default permissions granted to all domains section.
>
> On Wed, Aug 26, 2015 at 4:35 PM Tolen Miller <[email protected]> 
wrote:
>
> > forgot stack trace...
> >
> > *Exception in thread "AgentThread: JavaAgent"
> > java.security.AccessControlException: Access denied
> > (java.lang.RuntimePermission createSecurityManager)*
> > * at 
java.security.AccessController.throwACE(AccessController.java:100)*
> > * at
> >
> 
java.security.AccessController.checkPermission(AccessController.java:174)*
> > * at
> java.lang.SecurityManager.checkPermission(SecurityManager.java:544)*
> > * at
> >
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)*
> > * at
> >
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.java:1311)*
> > * at
> >
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1611)*
> > * at
> >
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)*
> > * at java.lang.SecurityManager.<init>(SecurityManager.java:294)*
> > * at JavaAgent$MySecurityManager.<init>(JavaAgent.java:159)*
> > * at JavaAgent$MySecurityManager.<init>(JavaAgent.java:159)*
> > * at JavaAgent.NotesMain(JavaAgent.java:36)*
> > * at lotus.domino.AgentBase.runNotes(Unknown Source)*
> > * at lotus.domino.NotesThread.run(Unknown Source)*
> >
> > On Wed, Aug 26, 2015 at 4:35 PM, Tolen Miller <[email protected]>
> wrote:
> >
> >> Well, I'm not sure that will work either:
> >>
> >> On Wed, Aug 26, 2015 at 4:17 PM, Roberto Nibali <[email protected]>
> >> wrote:
> >>
> >>> Hi
> >>>
> >>> You use Notes/Domino, which is quiet a challenge when it comes to
> >>> application security. The Java API of Notes/Domino contains two
> different
> >>> SecurityManagers - one for agents and one for servlets. The
> >>> SecurityManager
> >>> for agents is COM.ibm.JEmpower.applet.AppletSecurity and the
> >>> SecurityManager for servlers is lotus.notes.AgentSecurityManager. 
Both
> >>> inherit directly from java.lang.SecurityManager. Make sure you have
> the
> >>> appropriate settings and talk to the administrator of this node. 
Last
> but
> >>> not least, I suppose you have a support contract with IBM.
> >>>
> >>> If you can fiddle around with the JVM you'd like to invoke, add your
> own
> >>> grant policy file: -Djava.security.policy=applet.policy
> >>>
> >>> However, I doubt Lotus will let you do this, and most probably 
you'll
> >>> hit a
> >>> classloader issue. With some luck you could hijack the 
SecurityManager
> as
> >>> follows:
> >>>
> >>> private class MySecurityManager extends SecurityManager {
> >>>     @Override
> >>>     public void checkPermission(Permission perm) {
> >>>         return;
> >>>     }}
> >>>
> >>>
> >>> At the start of your Applet, you do the following:
> >>>
> >>> SecurityManager sm = new
> >>> MySecurityManager();System.setSecurityManager(sm);
> >>>
> >>>
> >>> Good luck
> >>>
> >>> Roberto
> >>>
> >>> On Thu, Aug 27, 2015 at 12:08 AM, Tolen Miller <[email protected]>
> >>> wrote:
> >>>
> >>> > Hello again,
> >>> >
> >>> > I was able to get the PrintFields example working, so thanks for
> >>> that.  I
> >>> > then applied what I learned to my situation and everything seemed 
to
> be
> >>> > going well, but now I have run into a roadblock:
> >>> > *java.lang.RuntimeException: java.security.AccessControlException:
> >>> Access
> >>> > denied (java.lang.reflect.ReflectPermission suppressAccessChecks)*
> >>> > * at
> >>> >
> >>>
> org.apache.pdfbox.pdmodel.font.PDType1CFont.load(PDType1CFont.java:411)*
> >>> > * at
> >>> >
> >>>
> 
org.apache.pdfbox.pdmodel.font.PDType1CFont.<init>(PDType1CFont.java:102)*
> >>> > * at
> >>> >
> >>>
> org.apache.pdfbox.pdmodel.font.PDType1Font.<init>(PDType1Font.java:162)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
org.apache.pdfbox.pdmodel.font.PDFontFactory.createFont(PDFontFactory.java:92)*
> >>> > * at
> >>> 
org.apache.pdfbox.pdmodel.PDResources.getFonts(PDResources.java:213)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.getFontAndUpdateResources(PDAppearance.java:820)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.setAppearanceValue(PDAppearance.java:316)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
org.apache.pdfbox.pdmodel.interactive.form.PDVariableText.setValue(PDVariableText.java:131)*
> >>> > * at JavaAgent.NotesMain(JavaAgent.java:69)*
> >>> > * at lotus.domino.AgentBase.runNotes(Unknown Source)*
> >>> > * at lotus.domino.NotesThread.run(Unknown Source)*
> >>> > *Caused by: java.security.AccessControlException: Access denied
> >>> > (java.lang.reflect.ReflectPermission suppressAccessChecks)*
> >>> > * at
> >>> java.security.AccessController.throwACE(AccessController.java:100)*
> >>> > * at
> >>> >
> >>>
> 
java.security.AccessController.checkPermission(AccessController.java:174)*
> >>> > * at
> >>> java.lang.SecurityManager.checkPermission(SecurityManager.java:544)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1449)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1617)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)*
> >>> > * at
> >>> >
> >>> >
> >>>
>
> 
java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:118)*
> >>> > * at
> >>> >
> >>>
> org.apache.pdfbox.pdmodel.font.PDType1CFont.load(PDType1CFont.java:406)*
> >>> > * ... 10 more*
> >>> >
> >>> > This occurs just as I am calling PDField.setValue() and assigning 
a
> >>> value.
> >>> > I checked the java.policy file and the location where the PDFBox 
JAR
> is
> >>> > stored has "AllPermission". I also ensured that my PDF has no
> security.
> >>> > Any thoughts on what else to look for?
> >>> >
> >>> >
> >>> >
> >>> >
> >>> > On Wed, Aug 26, 2015 at 2:15 AM, Roberto Nibali 
<[email protected]>
> >>> wrote:
> >>> >
> >>> > > Hi
> >>> > >
> >>> > > On Wed, Aug 26, 2015 at 9:27 AM, Maruan Sahyoun <
> >>> [email protected]>
> >>> > > wrote:
> >>> > >
> >>> > > > Hi,
> >>> > > >
> >>> > > > > Am 26.08.2015 um 06:00 schrieb Tolen Miller
> <[email protected]
> >>> >:
> >>> > > > >
> >>> > > > > I uploaded my PDF again, if someone wants to see if they can
> get
> >>> all
> >>> > of
> >>> > > > the
> >>> > > > > fields to return: http://1drv.ms/1PRKZsI
> >>> > > > >
> >>> > > > > After looking at the sample provided by Maruan, I noticed 
that
> I
> >>> was
> >>> > > not
> >>> > > > > passing in a File object, when calling the PDDocument.load()
> >>> method.
> >>> > > > Doing
> >>> > > > > so, I now get the same result from Maruan's code (in 
eclipse).
> >>> > > > >
> >>> > > > > Now I am unsure how to get *all* of the fields from the
> >>> PDAcroForm.
> >>> > I
> >>> > > am
> >>> > > > > trying to get a collection of the fields, so I can loop
> through
> >>> them.
> >>> > > > When
> >>> > > > > I add this code:
> >>> > > > >
> >>> > > > > List<PDField> pdfFields = form.getFields();
> >>> > > > > for (PDField field : pdfFields) {
> >>> > > > > System.out.println("PDF Field Full Name: ".concat(field
> >>> > > > > .getFullyQualifiedName()));
> >>> > > > > }
> >>> > > > >
> >>> > > >
> >>> > > > as there is only one 'root' field you have to get it's kids 
and
> >>> process
> >>> > > > the field tree down. Take a look at
> >>> > > > org.apache.pdfbox.examples.fdf.PrintFields of how to do that.
> >>> > > >
> >>> > > >
> >>> > > Having spent the last two months intensively with form fields,
> here
> >>> is my
> >>> > > current code to dump the fields:
> >>> > >
> >>> > > private void executeDumpFields(String srcDocName) throws
> IOException
> >>> {
> >>> > >     PDDocument srcDoc = null;
> >>> > >     try {
> >>> > >         srcDoc = PDDocument.load(new File(srcDocName));
> >>> > >
> >>> > >
> >>> >
> >>>
>
> 
srcDoc.getDocumentCatalog().getAcroForm().getFields().forEach(this::dumpField);
> >>> > >         srcDoc.close();
> >>> > >     } catch (Exception e) {
> >>> > >         logerr(e.getMessage());
> >>> > >     } finally {
> >>> > >         if (srcDoc != null) {
> >>> > >             srcDoc.close();
> >>> > >         }
> >>> > >     }
> >>> > > }
> >>> > >
> >>> > > private void dumpField(PDField srcField) {
> >>> > >     if (srcField instanceof PDNonTerminalField) {
> >>> > >         ((PDNonTerminalField)
> >>> > > srcField).getChildren().forEach(this::dumpField);
> >>> > >     } else if (!(srcField instanceof PDSignatureField)) {
> >>> > >         System.out.printf("fqName=%s type=%s%n",
> >>> > > srcField.getFullyQualifiedName(),
> >>> > > srcField.getClass().getSimpleName());
> >>> > >     }
> >>> > > }
> >>> > >
> >>> > > Maybe you can use some of it. Just call the 
executeDumpFields(...)
> >>> with
> >>> > the
> >>> > > appropriate PDF name as a string and go from there. Not
> >>> understanding the
> >>> > > PDF standard and how the dictionary trees are built up inside 
PDF,
> I
> >>> had
> >>> > a
> >>> > > hard time initially understanding why I need to kind of
> recursively
> >>> to
> >>> > > through the PDField entries.
> >>> > >
> >>> > > Cheers
> >>> > > Roberto
> >>> > >
> >>> >
> >>>
> >>
> >>
> >
>
>
>


Reply via email to