Comments (17)
This is kind of weird, as I'm using JAXBContext.newInstance (Class<?>)
internally and as well the appropriate ObjectFactory
class is present. Which version are you using?
Are you able to provide me with a short guideline how I can test this myself as I'm not an OSGI expert?? Thanks
from ph-ubl.
I have created a simple OSGi bundle that uses your library and demonstrates the errors (both for marshal and unmarshal) - https://github.com/apiticas/ph-ubl-osgi-client. Instructions for install and use are in the README.
from ph-ubl.
Thanks a lot - I'm investigating...
from ph-ubl.
This guy had the same problem: http://blog.kusandriadi.com/problem-using-jaxb-marshallingunmarshalling-within-osgi-container/ - I will also investigate respective changes in ph-commons
from ph-ubl.
Yes, it seems that either by passing the class instead of the package name, or the package name together with a bundle classloader to the JAXBContext newInstance method, the marshalling succeeds:
b1nnar/ph-ubl-osgi-client@9378258
from ph-ubl.
Thanks a lot for testing this out. I already modified the ph-commons API but unfortunately this makes caching a bit more difficult. As soon as I release 6.0.1 I can provide a ph-ubl* 4.0.0-RC1 version for testing (hopefully tomorrow).
And when using ph-ubl with OSGI I noticed that it always requires ph-ubl20 and ph-ubl21. I will therefore modify the API so that there is a generic "ph-ubl-api" project and the main content is only in the ph-ubl20 or ph-ubl21 projects. The "ph-ubl" project will therefore be eliminated.
from ph-ubl.
I will test the RC1 with my application as soon as you provide it.
Thanks a lot!
from ph-ubl.
Regarding the second problem:
Caused by: java.lang.IllegalStateException: Failed to open input stream for [cpPath=schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd; urlResolved=true; URL=null]
at com.helger.commons.xml.transform.ResourceStreamSource.getInputStream(ResourceStreamSource.java:66)
It is a classloader issue as well.
I have added 2 more commands to the client (getARSchemaWithClassloader
, getARSchemaWithoutClassloader
) on branch ResourceStreamProblem. They try to fetch the Schema resource InputStream using your API in commons. The one that specifies the classloader succeeds. So the problem may be in EUBL21DocumentType class where you call:
return new ClassPathResource (m_sXSDPath);
without specifying the classpath:
return new ClassPathResource (m_sXSDPath, getImplementationClass().getClassLoader());
from ph-ubl.
I'm already doing this locally, but there is a follow-up error ClassPathResource.getInpuStream if a ClassLoader is specified - you see that may ClassLoader experience is growing heavily these days ;-)
Stay tuned...
from ph-ubl.
With my local modifications I'm a step further:
Marshalling UBL document of type APPLICATION_RESPONSE
[Gogo shell] WARN com.helger.commons.url.URLHelper - Failed to open input stream for 'bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonAggregateComponents
-2.1.xsd': java.io.IOException - Resource does not exist: bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonAggregateComponents-2.1.xsd
[Gogo shell] WARN com.helger.commons.xml.sax.LoggingSAXErrorHandler - [warn] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(21:82): [SAX]
schema_reference.4: Schemadokument "bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonAggregateComponents-2.1.xsd" konnte nicht gelesen werden, da 1) das
Dokument nicht gefunden werden konnte; 2) das Dokument nicht gelesen werden konnte; 3) das Root-Element des Dokuments nicht <xsd:schema> ist.
[Gogo shell] WARN com.helger.commons.url.URLHelper - Failed to open input stream for 'bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonBasicComponents-2.1
.xsd': java.io.IOException - Resource does not exist: bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonBasicComponents-2.1.xsd
[Gogo shell] WARN com.helger.commons.xml.sax.LoggingSAXErrorHandler - [warn] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(23:78): [SAX]
schema_reference.4: Schemadokument "bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonBasicComponents-2.1.xsd" konnte nicht gelesen werden, da 1) das Doku
ment nicht gefunden werden konnte; 2) das Dokument nicht gelesen werden konnte; 3) das Root-Element des Dokuments nicht <xsd:schema> ist.
[Gogo shell] WARN com.helger.commons.url.URLHelper - Failed to open input stream for 'bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonExtensionComponents
-2.1.xsd': java.io.IOException - Resource does not exist: bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonExtensionComponents-2.1.xsd
[Gogo shell] WARN com.helger.commons.xml.sax.LoggingSAXErrorHandler - [warn] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(25:82): [SAX]
schema_reference.4: Schemadokument "bundle://18.0:1/schemas/ubl21/maindoc/common/UBL-CommonExtensionComponents-2.1.xsd" konnte nicht gelesen werden, da 1) das
Dokument nicht gefunden werden konnte; 2) das Dokument nicht gelesen werden konnte; 3) das Root-Element des Dokuments nicht <xsd:schema> ist.
[Gogo shell] ERROR com.helger.commons.xml.sax.LoggingSAXErrorHandler - [error] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(46:77): [SA
X] src-resolve: Name "ext:UBLExtensions" kann nicht als "element declaration"-Komponente aufgelöst werden.
[Gogo shell] ERROR com.helger.commons.xml.sax.LoggingSAXErrorHandler - [error] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(51:75): [SA
X] src-resolve: Name "cbc:UBLVersionID" kann nicht als "element declaration"-Komponente aufgelöst werden.
[Gogo shell] ERROR com.helger.commons.xml.sax.LoggingSAXErrorHandler - [error] bundle://18.0:1/schemas/ubl21/maindoc/UBL-ApplicationResponse-2.1.xsd(247:79): [S
AX] src-resolve: Name "cac:Signature" kann nicht als "element declaration"-Komponente aufgelöst werden.
[Gogo shell] INFO com.helger.commons.jaxb.JAXBContextCache - Creating JAXB context for package oasis.names.specification.ubl.schema.xsd.applicationresponse_21
[Gogo shell] ERROR com.helger.ubl21.UBL21Marshaller - Failed to set the namespace prefix mapper: java.lang.IllegalArgumentException -- Failed to set JAXB proper
ty 'com.sun.xml.bind.namespacePrefixMapper' to com.helger.commons.jaxb.JAXBNamespacePrefixMapperOracleRT@492d0d
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:ApplicationResponse xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xml
ns:ns2="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:ns3="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateCompone
nts-2" xmlns:ns4="urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2"><ID>TEST_UBL_ID</ID></ns4:ApplicationResponse>
One difference was to use UBL21Marshaller.class.getClassLoader()
instead of PhUblClient.class.getClassLoader()
Update: this means that resource resolving in SAX still fails - work in progress
from ph-ubl.
I'm still trying to figure out what the problem is and I'm stil stuck with the XML resource resolving. I finally managed to get all paths and ClassLoaders right, but Felix debug states e.g.
DEBUG: Bundle com.helger.ph-ubl21 [23] bundle://23.0:1/schemas/ubl21/common/UBL-SignatureBasicComponents-2.1.xsd not found by com.helger.ph-ubl21 [23]
So probably just joining URLs is not enough. E.g. http://stackoverflow.com/questions/6474634/how-do-i-access-a-file-inside-an-osgi-bundle suggests to use Bundle.getResource(name)
instead of classLoader.getResource(name)
. I need to understand the bundle URL scheme (the 23.0:1
) before I can continue: bundle://<revision-id>:<bundle-classpath-index>/<resource-path>
.
Maybe a special LSResourceResolver
for bundle URLs must be added....
from ph-ubl.
Now I added a special LSResourceResolver but struggeling how I make it available in a nice way.
I'm now on vacation for one week but will continue afterwards - please stay tuned.
from ph-ubl.
Ok, thanks.
from ph-ubl.
Finally the trunk versions (ph-commons 6.0.2-SNAPSHOT and ph-ubl21 4.0.0-SNAPSHOT) can handle the issue. It was basically a problem in the SimpleLSResourceResolver that was handling base URLs with a filename (like ".../ApplicationResponse.xsd") and a relative system URL incorrectly. This has now been fixed. There is now one little incident open so that the namespace mapper (mapping prefix to namespace URL) does not yet work:
[Gogo shell] ERROR com.helger.ubl21.UBL21Marshaller - Failed to set the namespace prefix mapper: java.lang.IllegalArgumentException -- Failed to set JAXB property 'com.sun.xml.bind
.namespacePrefixMapper' to com.helger.commons.jaxb.JAXBNamespacePrefixMapperOracleRT@7d5213
javax.xml.bind.PropertyException: name: com.sun.xml.bind.namespacePrefixMapper value: com.helger.commons.jaxb.JAXBNamespacePrefixMapperOracleRT@7d5213
at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.setProperty(Unknown Source)
at com.helger.commons.jaxb.JAXBMarshallerHelper._setProperty(JAXBMarshallerHelper.java:65)
at com.helger.commons.jaxb.JAXBMarshallerHelper.setSunNamespacePrefixMapper(JAXBMarshallerHelper.java:291)
at com.helger.commons.jaxb.JAXBMarshallerHelper.setSunNamespacePrefixMapper(JAXBMarshallerHelper.java:270)
at com.helger.ubl21.UBL21Marshaller._createFullMarshaller(UBL21Marshaller.java:226)
at com.helger.ubl21.UBL21Marshaller.writeUBLDocument(UBL21Marshaller.java:326)
at ro.alx.phublclient.impl.PhUblClient.marshal(PhUblClient.java:23)
at ro.alx.phublclient.commands.PhUblClientCommands.marshal(PhUblClientCommands.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
at org.apache.felix.gogo.shell.Console.run(Console.java:62)
at org.apache.felix.gogo.shell.Shell.console(Shell.java:203)
at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
at org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
at java.lang.Thread.run(Unknown Source)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:ApplicationResponse xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ns2="urn:oasis:na
mes:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:ns3="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ns4="urn:oasis:names:specif
ication:ubl:schema:xsd:ApplicationResponse-2"><ID>TEST_UBL_ID</ID></ns4:ApplicationResponse>
from ph-ubl.
Pleas try ph-commons 6.1.0, ph-jaxb 6.1.0 and the ph-ubl 4.0.0-RC2 artefacts.
The problem with the namespacePrefixMapper stays because it is really hard to track and not so limiting.
Btw. You may use GlobalDebug.setDebugModeDirect(false) to disable the stacktraces
from ph-ubl.
ph-ubl 4.0.0 is out...
from ph-ubl.
Thanks a lot!
from ph-ubl.
Related Issues (20)
- Determine Type of document from XML String HOT 2
- Creating Empty UBL Extensions HOT 2
- How to add UBLDocumentSignatures in UBL Extension? HOT 1
- how to change cbc:IssueTime formats HOT 13
- If the Invoice did not have AccountingCustomerParty It will not continue to produce the invoice HOT 2
- eForms support HOT 9
- Implementation of JAXB-API has not been found on module path or classpath. HOT 2
- UBLExtensions HOT 3
- Maven central release of 6.7.0 HOT 1
- EmbeddedDocumentBinaryObjectType value only Bytes() can't be String HOT 5
- In UBLExtension How I can replace prefix "cec" with "ext"? HOT 2
- Invoice xmlns prefix HOT 2
- Error when run createinvoicefromscratch HOT 8
- Fill InvoiceType Object from List<Map<String,String>> HOT 3
- No Prefix is geting added after adding the namespace context HOT 9
- custom XSD schema HOT 5
- Update UBLTR specifications HOT 3
- Master branch can compile using JDK 11 or higher version.But i can only JDK 1.8 version for some reason. HOT 4
- XML cut off on write HOT 1
- Failed to add multiple scheme ID with value in PartyIdentificationType for UBL 2.1 version 9.0.0 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ph-ubl.