Я был на одном учебном пособии по Java / Salesforce , но я не мог заставить его работать как есть, потому что SoapBindingStub кажется устаревшим кодом, основанным на устаревших библиотеках.Поэтому я попытался объединить код с кодом JAX-WS Quick Start , но это тоже не сработало.Что бы я ни делал, в конечном итоге образец консольного приложения будет страдать от исключений, жалуясь на « Исключение веб-службы при создании порта salesface. Невозможно создать JAXBContext из-за ограничения безопасности для класса javax.xml.ws.WebServiceException ».
Я отказался (на данный момент) от попытки смешать два кода, и вместо этого сейчас просто работаю над абстрагированием JAX-WS Quickstart.java, чтобы я мог понять, как это работает, и использовать его методы в другихприложения.
Независимо от того, как я нарезаю и нарезаю код, он всегда застревает в одном и том же месте, по сути, с одной и той же ошибкой.
Вот текущий код метода, который постоянно терпит неудачу:
private void initPort()
{
try
{
URL wsdlLocation = this.getClass().getClassLoader().getResource("META-INF/enterprise.wsdl");
if (wsdlLocation == null)
{
WebServiceException webServiceException = new WebServiceException("enterprise.wsdl not found!");
ExceptionToolkit.display("Web Service Exception can't find enterprise.wsdl", webServiceException);
throw webServiceException;
}
else {System.out.println("\nFOUND enterprise.wsdl!!!\n\n");}
QName qName = new QName("urn:enterprise.soap.sforce.com", "SforceService");
SforceService sforceService = new SforceService( wsdlLocation, qName );
System.out.println("\nsforceService INITIALIZED. About to get Soap.\n\n");
Soap soap = (sforceService).getSoap();
System.out.println("\nWe have soap.\n\n");
setPort (soap);
}
catch (WebServiceException webServiceException)
{
ExceptionToolkit.display("Web Service Exception creating salesface port", webServiceException);
return;
}
}
Вот ошибка, включая вывод непосредственно перед и после:
Running main loop
FOUND enterprise.wsdl!!!
sforceService INITIALIZED. About to get Soap.
Web Service Exception creating salesface port: Unable to create JAXBContext due to the security restriction
on class javax.xml.ws.WebServiceException
javax.xml.ws.WebServiceException: Unable to create JAXBContext due to the security restriction
at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:131)
at com.sun.xml.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:63)
at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:224)
at com.sun.xml.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:588)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:291)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:274)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:267)
at javax.xml.ws.Service.getPort(Unknown Source)
at com.sforce.soap.enterprise.SforceService.getSoap(SforceService.java:53)
at hu.flux.salesforce.LoginToolkit.initPort(LoginToolkit.java:78)
at hu.flux.salesforce.LoginToolkit.doLogin(LoginToolkit.java:122)
at hu.flux.salesforce.LoginToolkit.<init>(LoginToolkit.java:49)
at hu.flux.salesforce.samples.Quickstart.mainLoop(Quickstart.java:55)
at hu.flux.salesforce.samples.Quickstart.<init>(Quickstart.java:28)
at hu.flux.salesforce.samples.Quickstart.main(Quickstart.java:21)
Caused by: java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
this problem is related to the following location:
at java.lang.StackTraceElement
at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
at java.lang.Throwable
at java.lang.Exception
at com.sforce.ws.ConnectionException
at com.sforce.ws.SoapFaultException
at com.sforce.soap.enterprise.fault.ApiFault
at public javax.xml.bind.JAXBElement com.sforce.soap.enterprise.fault.ObjectFactory.createFault(com.sforce.soap.enterprise.fault.ApiFault)
at com.sforce.soap.enterprise.fault.ObjectFactory
com.sforce.ws.types.Time does not have a no-arg default constructor.
this problem is related to the following location:
at com.sforce.ws.types.Time
at public com.sforce.ws.types.Time com.sforce.soap.enterprise.sobject.BusinessHours.getFridayEndTime()
at com.sforce.soap.enterprise.sobject.BusinessHours
at public com.sforce.soap.enterprise.sobject.BusinessHours com.sforce.soap.enterprise.sobject.ObjectFactory.createBusinessHours()
at com.sforce.soap.enterprise.sobject.ObjectFactory
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.xml.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:124)
... 14 more
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
this problem is related to the following location:
at java.lang.StackTraceElement
at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
at java.lang.Throwable
at java.lang.Exception
at com.sforce.ws.ConnectionException
at com.sforce.ws.SoapFaultException
at com.sforce.soap.enterprise.fault.ApiFault
at public javax.xml.bind.JAXBElement com.sforce.soap.enterprise.fault.ObjectFactory.createFault(com.sforce.soap.enterprise.fault.ApiFault)
at com.sforce.soap.enterprise.fault.ObjectFactory
com.sforce.ws.types.Time does not have a no-arg default constructor.
this problem is related to the following location:
at com.sforce.ws.types.Time
at public com.sforce.ws.types.Time com.sforce.soap.enterprise.sobject.BusinessHours.getFridayEndTime()
at com.sforce.soap.enterprise.sobject.BusinessHours
at public com.sforce.soap.enterprise.sobject.BusinessHours com.sforce.soap.enterprise.sobject.ObjectFactory.createBusinessHours()
at com.sforce.soap.enterprise.sobject.ObjectFactory
at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:66)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:422)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:270)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:103)
at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:89)
at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:126)
at com.sun.xml.ws.model.AbstractSEIModelImpl$1.run(AbstractSEIModelImpl.java:125)
... 16 more
1. Login
2. Get Accounts
3. Update Accounts
4. Get Server Timestamp
5. Exit
Enter a menu option:
Последняя строка (в хронологическом порядке) в стеке, которая ссылается на мой собственный код:
at hu.flux.salesforce.LoginToolkit.initPort(LoginToolkit.java:78)
Операторы System.out.println в источнике подтверждают, что именно это выполнение завершается.В этой строке конкретно указывается:
Soap soap = (sforceService).getSoap();
Кто-нибудь знает, как или почему это может выйти за пределы ограничения безопасности, в конечном итоге оставляя Java неспособным создать JAXBContext?