Login  Register

Re: Re: Re: Re: Re: Re: From java servlet to orbeon context

Posted by Bart Ottenkamp on Sep 10, 2009; 2:08pm
URL: https://discuss.orbeon.com/From-java-servlet-to-orbeon-context-tp44958p44968.html

Hai Alex,

I (still) have trouble giving back a result to the client after a submission...
Please, forget all other things mentioned in this mail conversation, because I mostly resolved them, but this one is still hard to figure out.
I'm really desperate now, because if I don't fix this now, I'll be forced to drop using orbeon and advice my client to use something else. And I don't want that, because I came all this way...

Here is my mail again (please reply):

First question is:
does anybody have an example of a form, that submits a part of the model via a pipeline to a custom java processor and than gives back a result (just a message is enough) to the client?
I think it should be possible (would be very weird if it is not possible, I think!) and if anybody knows how to do this, I think it should help if we make an example for it and add it to the xforms-sandbox...

I really think I just have a very small error in configuration somewhere and I cannot find what is going wrong. Here is what I have:

in my .xhtml:

            <xforms:instance id = "result-instance">
                <root>
                    <result/>
                    <failure/>
                    <success/>
                </root>
            </xforms:instance>

and

            <xforms:submission
                id = "mail-submission"
                ref = "instance('form-instance')/
formcontent"
                xxforms:show-progress = "false"
                method = "post"
                action = "/e-formulieren/mail"
                replace = "instance"
                instance = "result-instance">
                <xforms:setvalue ev:event = "xforms-submit-done" ref = "instance('result-instance')/success">success</xforms:setvalue>
                <xforms:message ev:event = "xforms-submit-error" level = "modal">error occurred</xforms:message>
            </xforms:submission>

in my page-flow.xml:
    <!-- mail -->
    <page path-info="/e-formulieren/mail" model="forms/xpl/mail.xpl" />

in forms/xpl/mail.xpl:

<p:config
    xmlns:p = "http://www.orbeon.com/oxf/pipeline"
    xmlns:oxf = "http://www.orbeon.com/oxf/processors"
    xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
    xmlns:divosa = "http://www.divosa.com/ops/processors">
    <p:param name = "instance" type = "input"/>
    <p:param name = "data" type = "output"/>
    <p:processor name = "divosa:mailProcessor">
        <p:input name = "data" href = "#instance"/>
        <p:output name = "data" ref = "data"/>
    </p:processor>
</p:config>

and then my mailProcessor:
public class MailProcessor extends SimpleProcessor {

    private static Logger LOGGER = Logger.getLogger(MailProcessor.class);

    public MailProcessor() {
        addInputInfo(new ProcessorInputOutputInfo("instance"));
        addOutputInfo(new ProcessorInputOutputInfo(OUTPUT_DATA));
    }

   
    @Override
    public void generateData(PipelineContext context, ContentHandler contentHandler) throws SAXException, DocumentException {
        Document inputDocument = readInputAsDOM4J(context, "data");
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug(inputDocument.asXML());
        }
       
        org.dom4j.Document doc = DocumentHelper.createDocument();
        org.dom4j.Element root = doc.addElement("root");
        org.dom4j.Element result = root.addElement("result");
        // do the actual processing on the submitted information
        try {
            FormSubmitHandler formSubmitHandler = FormSubmitHandlerFactory.getFormSubmitHandler(Constants.FORM_SUBMIT_MAIL);
            String r = (String) formSubmitHandler.handle(inputDocument);
            result.addText("Het formulier is succesvol gemaild op "
                    + new SimpleDateTimeFormatter("dd-MM-YYYY HH:mm:ss").formatSimpleDateTime(new DateTime()));
        } catch (Exception e) {
            result.addText("Er is een fout opgetreden bij het mailen: " + e.getMessage());
        }
       
        LocationSAXWriter saxWriter = new LocationSAXWriter();
        saxWriter.setContentHandler(contentHandler);
        saxWriter.write(doc);
    }

As you can see, with the declaration in the submission:
                replace = "instance"
                instance = "result-instance"
I try to replace the result instance with what I construct in the MailProcessor...

The logging put to debug, this is (all) what I see:
2009-09-01 09:52:20,055 WARN  XFormsServer  - XForms - submission - instance replacement did not take place upon successful response because no body was provided. Submission: mail-submission

Can you help??? Do you see where I go wrong?

And I really think it would help to add an example to the sandbox.. then I won't have to bother you about thiss...

Thanks and best regards,
Bart Ottenkamp


On Wed, Jul 22, 2009 at 12:36 AM, Alessandro Vernet <[hidden email]> wrote:

Bart,


bartottenkamp wrote:
>
> 1.
> Did you have a look at what I mailed you what's in my java code, page-flow
> and .xpl? You might see a thing missing or something done wrong...
> This is what is returned to the client from the java code I mailed you:
>
> <?xml version="1.0" encoding="utf-8"?><xxf:event-response
> xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
>><xxf:dynamic-state>pers:784A27F5-359A-CFA7-F395-2C0DFFDB57FB</xxf:dynamic-state><xxf:action><xxf:control-values
> /></xxf:action></xxf:event-response>
>
> so this indeed seems empy and I guess the logging of XFormsServer is
> therefore correct:
>
> WARN  XFormsServer  - XForms - submission - instance replacement did not
> take place upon successful response because no body was provided.
> Submission: mail-submission
>

Not quite. There are 2 distinct requests:

* The Ajax request made from the browser to the server and its response.
This is what you see in Firebug, and is "internal" to Orbeon Forms.
* The submission done from the server to your service. That is the
submission that contains the data you are interested it. If you get a
nightly build and set the XFormsModelSubmission to log at the debug level
(see: http://wiki.orbeon.com/forms/doc/developer-guide/xforms-logging), you
can see what is sent to your service, and what comes back. This is what we
are interested in.

So in addition to testing this with nightly build, I recommend you add
XFormsModelSubmission in debug mode to you log4j.xml and see what is sent
and received by the service. Also add a debug on the output of the pipeline
to see what is returned by the pipeline.


bartottenkamp wrote:
>
> 2.
> Can you maybe point me to an example of what I want; a submit that 'goes'
> to
> java and returns the result? Like 'success' or 'failure'... There should
> be
> one or two I think...?
>

Using the Java processor there is generic-init-database.xpl in the examples,
but it doesn't return any data.


bartottenkamp wrote:
>
> 3.
> I also asked you this question:
> - trying to call some orbeon functionallity in my own java code to turn
> the
> complete node into a stripped one that only has the relevant nodes.. You
> do
> this somewhere in orbeon code, don't you? Can I call this code? Since I
> have
> the context available?
> Do you know an answer to this one?
>

What do you mean by stripped node? I assume you have a DOM in Java, from
which you want to remove node; which one?


bartottenkamp wrote:
>
> 4.
> Back to my problem with popup blocking:
> I' m always working with FF3 and IE8 and everything works fine there, but
> if
> I use IE6 en IE7, popup blocking is in the way and if I then choose to
> allow
> popups, the pdf is NOT downloaded AND the form is refreshed and all data
> id
> gone...
> My quess my first question is; doesn't ring this a bell somewhere with
> you?
> Am I the only one with this problem as you know?
>

You're not. And the only reliable way I know to do this, at the HTML level,
is to have in the page a simple link  ... Download PDF . If you have the
file you want to serve in a node (base64 or URI to temporary file), you can
use an <xforms:output ref="file1" appearance="xxforms:download">. You'll
find an example of this in output-download.xhtml, and more documentation on:

http://www.orbeon.com/ops/doc/reference-xforms-extensions#xxforms-download-appearance

Alex

-----
Orbeon Forms - Web 2.0 Forms, open-source, for the Enterprise
Orbeon's Blog: http://www.orbeon.com/blog/
Personal Blog: http://avernet.blogspot.com/
Twitter - http://twitter.com/avernet
--
View this message in context: http://www.nabble.com/From-java-servlet-to-orbeon-context-tp24479768p24597044.html
Sent from the ObjectWeb OPS - Users mailing list archive at Nabble.com.



--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws




--
You receive this message as a subscriber of the [hidden email] mailing list.
To unsubscribe: mailto:[hidden email]
For general help: mailto:[hidden email]?subject=help
OW2 mailing lists service home page: http://www.ow2.org/wws