You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by shooding <sh...@gmail.com> on 2011/06/08 09:26:43 UTC
Problem when developing sip binding component
We're using jain-sip 1.2 to develop a sip-bc and deployed to SMX4.3
without an error. Then we create an SA to start it.
While SIPReceiverEndpoint.start, SipFactory.createStack, we got a
PeerUnavailableException.
I wonder if Class.forName (aka Java reflection) does not work.
Here is a page talking about dynamic import.
http://billhiggins.us/blog/2011/02/24/using-reflection-in-osgi/
http://billhiggins.us/blog/2011/02/24/using-reflection-in-osgi/
Therefore, we added
<servicemix.osgi.dynamic.import>*</servicemix.osgi.dynamic.import> to the
pom.xml of sip-bc.
Still got the same exception.
The following code is a snippet of SipFactory.java.
private SipStack createStack(Properties properties)
throws PeerUnavailableException {
try {
// create parameters argument to identify constructor
Class[] paramTypes = new Class[1];
paramTypes[0] = Class.forName("java.util.Properties");
// get constructor of SipStack in order to instantiate
Constructor sipStackConstructor = Class.forName(
getPathName() + ".javax.sip.SipStackImpl").getConstructor(
paramTypes);
// Wrap properties object in order to pass to constructor of
// SipSatck
Object[] conArgs = new Object[1];
conArgs[0] = properties;
// Creates a new instance of SipStack Class with the supplied
// properties.
SipStack sipStack = (SipStack) sipStackConstructor.newInstance(conArgs);
sipStackList.add(sipStack);
String name = properties.getProperty("javax.sip.STACK_NAME");
this.sipStackByName.put(name, sipStack);
return sipStack;
} catch (Exception e) {
String errmsg = "The Peer SIP Stack: "
+ getPathName()
+ ".javax.sip.SipStackImpl"
+ " could not be instantiated. Ensure the Path Name has been set.";
throw new PeerUnavailableException(errmsg, e);
}
}
-----
Industrial Technology Research Institute
Rm. 226 Bldg. 14, 2F, 195, Sec. 4, Chung Hsing Rd.,
Chutung, Hsinchu, Taiwan 31040, R.O.C.
--
View this message in context: http://servicemix.396122.n5.nabble.com/Problem-when-developing-sip-binding-component-tp4468146p4468146.html
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.
Re: Problem when developing sip binding component
Posted by Freeman Fang <fr...@gmail.com>.
Hi,
Using Class.forName() in OSGi always cause problem.
Seems you already figure out the solution, but I think you need add
dynamic import for jain-sip bundle.
Another solution is use fragment bundle which contain the classes
that jain-sip need init using Class.forName() and attach this
fragment to the jain-sip bundle, in this case the jain-sip bundle play
the role as a host and all resources in fragment is available for host.
Freeman
On 2011-6-8, at 下午3:26, shooding wrote:
> We're using jain-sip 1.2 to develop a sip-bc and deployed to SMX4.3
> without an error. Then we create an SA to start it.
> While SIPReceiverEndpoint.start, SipFactory.createStack, we got a
> PeerUnavailableException.
> I wonder if Class.forName (aka Java reflection) does not work.
> Here is a page talking about dynamic import.
> http://billhiggins.us/blog/2011/02/24/using-reflection-in-osgi/
> http://billhiggins.us/blog/2011/02/24/using-reflection-in-osgi/
> Therefore, we added
> <servicemix.osgi.dynamic.import>*</servicemix.osgi.dynamic.import>
> to the
> pom.xml of sip-bc.
> Still got the same exception.
>
> The following code is a snippet of SipFactory.java.
>
> private SipStack createStack(Properties properties)
> throws PeerUnavailableException {
> try {
> // create parameters argument to identify constructor
> Class[] paramTypes = new Class[1];
> paramTypes[0] = Class.forName("java.util.Properties");
> // get constructor of SipStack in order to instantiate
> Constructor sipStackConstructor = Class.forName(
> getPathName() + ".javax.sip.SipStackImpl").getConstructor(
> paramTypes);
> // Wrap properties object in order to pass to constructor of
> // SipSatck
> Object[] conArgs = new Object[1];
> conArgs[0] = properties;
> // Creates a new instance of SipStack Class with the supplied
> // properties.
> SipStack sipStack = (SipStack)
> sipStackConstructor.newInstance(conArgs);
> sipStackList.add(sipStack);
> String name = properties.getProperty("javax.sip.STACK_NAME");
> this.sipStackByName.put(name, sipStack);
> return sipStack;
> } catch (Exception e) {
> String errmsg = "The Peer SIP Stack: "
> + getPathName()
> + ".javax.sip.SipStackImpl"
> + " could not be instantiated. Ensure the Path Name has been
> set.";
> throw new PeerUnavailableException(errmsg, e);
> }
> }
>
>
> -----
> Industrial Technology Research Institute
> Rm. 226 Bldg. 14, 2F, 195, Sec. 4, Chung Hsing Rd.,
> Chutung, Hsinchu, Taiwan 31040, R.O.C.
> --
> View this message in context: http://servicemix.396122.n5.nabble.com/Problem-when-developing-sip-binding-component-tp4468146p4468146.html
> Sent from the ServiceMix - Dev mailing list archive at Nabble.com.
---------------------------------------------
Freeman Fang
FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com