
O código do composite.xml deve ter uma parte parecida com essa:
[sourcecode language=”xml”] <component name="PrefsBPELProcess" version="2.0">
<implementation.bpel src="PrefsBPELProcess.bpel"/>
<property name="bpel.config.transaction" type="xs:string" many="false">required</property>
<property name="bpel.preference.nome" type="xs:string" many="false"
override="may">Sem Nome</property>
</component>[/sourcecode]
Crie uma aplicação SOA Suite e no composite.xml, arraste o componente Spring Context (Component Pallete) para a raia do meio.

Clique em OK. Você deverá ter um componente com um folhinha verde no meio do composite. O próximo passo é criar uma interface e uma classe para ser utilizada com o Spring Context. Clique em File, New, Java Interface e clique em OK. Dê um nome, no meu exemplo vou dar o nome de OlaSpring. Clique em OK. Insira o seguinte conteúdo:
]]>O primeiro passo é criar um projeto SOA e arrastar o File Adapter para o composite.xml. Na tela de configuração do File Adapter, clique em Next. Dê um nome para o File Adapter e clique em Next. Na próxima tela, deixe marcado para definir o WSDL posteriormente e clique em Next. Escolha a opção Read file, deixa as opções padrões e clique em Next. Especifique os diretório de leitura e marque as opções: “Process files recursively”, “Archive processed files (especifique um diretório)” e “Delete files after successful retrieval”.


Agora ao executar o processo BPEL, você terá como buscar pelo título no Enterprise Manager:

java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2367) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415) at java.lang.StringBuffer.append(StringBuffer.java:237) at org.tmatesoft.svn.core.SVNErrorMessage.getFullMessage(SVNErrorMessage.java:257) at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:58) at org.tmatesoft.svn.core.internal.wc.admin.SVNAdminAreaFactory.open(SVNAdminAreaFactory.java:163) at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.doOpen(SVNWCAccess.java:364) at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.open(SVNWCAccess.java:272) at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.open(SVNWCAccess.java:265) at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.openAnchor(SVNWCAccess.java:145) at org.tmatesoft.svn.core.wc.SVNStatusClient.doStatus(SVNStatusClient.java:320) at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:296) at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:278) at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:480) at org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapter.getStatus(SvnKitClientAdapter.java:141) at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.getStatus(AbstractJhlClientAdapter.java:466) at oracle.jdevimpl.vcs.svn.SVNURLInfoCacheSimpleStrategy.getURLInfo(SVNURLInfoCacheSimpleStrategy.java:79) at oracle.jdevimpl.vcs.svn.SVNURLInfoCache.getLastChangedRevision(SVNURLInfoCache.java:69) at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.createTooltip(SVNOverlayProducer.java:240) at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.getDecoratedOverlay(SVNOverlayProducer.java:144) at oracle.jdevimpl.vcs.svn.SVNOverlayProducer.produceOverlay(SVNOverlayProducer.java:113) at oracle.jdeveloper.vcs.spi.VCSOverlayItemProducer.produceOverlays(VCSOverlayItemProducer.java:83) at oracle.jdeveloper.vcs.spi.VCSOverlayItemProducer.getOverlayItems(VCSOverlayItemProducer.java:65) at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getCompositeElementOverlay(VCSNodeOverlayTracker.java:318) at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getCompositeElementOverlay(VCSNodeOverlayTracker.java:359) at oracle.jdeveloper.vcs.spi.VCSNodeOverlayTracker.getOverlays(VCSNodeOverlayTracker.java:261) at oracle.ide.explorer.IconOverlayTracker.processPendingNodes(IconOverlayTracker.java:574) at oracle.ide.explorer.IconOverlayTracker.access$1400(IconOverlayTracker.java:69) at oracle.ide.explorer.IconOverlayTracker$7.run(IconOverlayTracker.java:487) at java.util.TimerThread.mainLoop(Timer.java:555) java.lang.IllegalStateException: Timer already cancelled. at java.util.Timer.sched(Timer.java:397) at java.util.Timer.schedule(Timer.java:193) at oracle.ide.explorer.IconOverlayTracker._scheduleUpdateTask(IconOverlayTracker.java:498) at oracle.ide.explorer.IconOverlayTracker.scheduleUpdateTask(IconOverlayTracker.java:449) at oracle.ide.explorer.IconOverlayTracker.repaintConsumerOverlays(IconOverlayTracker.java:432) at oracle.ide.explorer.IconOverlayTracker.access$000(IconOverlayTracker.java:69) at oracle.ide.explorer.IconOverlayTracker$2.stateChanged(IconOverlayTracker.java:114) at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.setVisibleNodes(IconOverlayTracker.java:843) at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.removeInternalListeners(IconOverlayTracker.java:860) at oracle.ide.explorer.IconOverlayTracker$NodeWatcher.access$2300(IconOverlayTracker.java:713) at oracle.ide.explorer.IconOverlayTracker$NodeWatcher$ParentListener.ancestorRemoved(IconOverlayTracker.java:919) at javax.swing.AncestorNotifier.fireAncestorRemoved(AncestorNotifier.java:107) at javax.swing.AncestorNotifier.propertyChange(AncestorNotifier.java:233) at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263) at java.awt.Component.firePropertyChange(Component.java:8382) at javax.swing.JComponent.removeNotify(JComponent.java:4765) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at oracle.ideimpl.docking.TitledPanel.removeNotify(TitledPanel.java:267) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at java.awt.Container.removeNotify(Container.java:2800) at javax.swing.JComponent.removeNotify(JComponent.java:4761) at javax.swing.JRootPane.removeNotify(JRootPane.java:764) at java.awt.Container.removeNotify(Container.java:2800) at java.awt.Window.removeNotify(Window.java:782) at java.awt.Frame.removeNotify(Frame.java:1041) at java.awt.Window$1DisposeAction.run(Window.java:1190) at java.awt.Window.doDispose(Window.java:1205) at java.awt.Window.dispose(Window.java:1147) at oracle.ide.IdeMainWindow.close(IdeMainWindow.java:408) at oracle.ideimpl.MainWindowImpl.close(MainWindowImpl.java:605) at oracle.ide.IdeMainWindow$1.close(IdeMainWindow.java:327) at oracle.ide.cmd.ExitCommand.doit(ExitCommand.java:434) at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317) at oracle.jdevimpl.merge.MergeExitCommand.doit(MergeExitCommand.java:48) at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317) at oracle.ide.IdeCore.quit(IdeCore.java:786) at oracle.ide.Ide.quit(Ide.java:604) at oracle.ide.Ide.quit(Ide.java:611) at oracle.ideimpl.extension.preference.ConfigureExtensionCommand.doit(ConfigureExtensionCommand.java:113) at oracle.ide.controller.CommandProcessor.invoke(CommandProcessor.java:317) at oracle.ide.controller.IdeAction.performAction(IdeAction.java:556) at oracle.ide.controller.IdeAction.actionPerformedImpl(IdeAction.java:897) at oracle.ide.controller.IdeAction.actionPerformed(IdeAction.java:501) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at org.java.ayatana.ApplicationMenu$4.run(ApplicationMenu.java:486) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701) at java.awt.EventQueue.access$000(EventQueue.java:102) at java.awt.EventQueue$3.run(EventQueue.java:662) at java.awt.EventQueue$3.run(EventQueue.java:660) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:671) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)]]>

Clique em Next. No nosso exemplo, vamos utilizar a opção Fixed Length que é um formato bastante utilizado para troca de informações entre empresas bancárias, mas sinta-se livre para aventurar em outros formatos, como o Delimited, Complex Type, DTD to XSD ou Cobol Copybook. Clique em Next. Na próxima tela, escolha um arquivo que tenha um exemplo de saída desejada. Para facilitar você pode utilizar o meu arquivo. Selecione o Character set como UTF-8 que é o Character set do meu arquivo e clique em Next.
]]>
No XSD criado (normalmente NomeDoBPEL.xsd), edite os dados de entrada e de saída. No nosso exemplo, vamos criar um processo BPEL que receba uma lista de pessoas (nome e telefone), grave no arquivo e retorne a quantidade de registros gravados. Para simplificar, não vamos criar um XSD simples, sem import e afins, então vamos utilizar o seguinte:
]]>Crie um projeto com um BPEL síncrono, conforme descrito neste post, mas sem o For Each. Altere o xsd do BPEL para que o input, seja do tipo integer. Entre o elemento receiveInput e replyOutput, arraste um componente de Business Rules. Dê dois cliques para editar e clique no “+” para adicionar um novo dicionário. Especifique um nome (IdadeOracleRules), clique em “+” e Add Input Variable, para adicionar uma variável de entrada. Selecione o nó Variables e clique em “+”. Informe o nome “idade”. Clique na lupa, selecione o xsd dentro de Project Schema Files e escolha o variável de entrada do processo (process). Na aba initialize, informe o seguinte XPath: $inputVariable.payload para inicializar a variável de entrada com o valor de entrada do processo. Clique OK e faça o mesmo para a variável de saída (output), mas sem a necessidade de inicializar, crie a variável com o nome mensagem. Você deverá obter o seguinte resultado:
]]>Vá em File, New, SOA Application e clique OK. Dê um nome para a sua aplicação (no meu caso: ExemploForBPELApplication) e clique em Next. Dê um nome para o projeto (ExemploForBPELProject) e clique em Next. Selecione Composite With BPEL Process e clique em Finish. Informe os dados do processo (no nosso exemplo será síncrono) e clique em OK.

Abra o XSD criado. Altere a string de entrada para permitir mais de uma string de entrada. Altere o valor do minOccurs para 0 e do maxOccurs para unbounded. Altere o name para algo mais expressivo, como “nome”.
O resultado final é o seguinte:
]]>A required header representing a Message Addressing Property is not present
Os testes realizados no SOAP-UI e cliente WS criado não apresentavam nenhum erro, então ficava difícil simular o ocorrido. Pela mensagem informada, podemos ter dois tipos de erro: