我正在尝试使用JAIN SIP 1.2和NIST实现构建一个简单的SIP应用程序。我正在使用JavaSE1.7和Eclipse作为我的IDE。 问题:我在尝试构造SipStack对象时遇到了javax.sip.PeerUnavailableException。
我的主要课程:
package net.bezeqint.sip.enp;
public class ListenerMain {
public static void main(String[] args) {
try {
System.out.println("Creating ExampleListener...");
ExampleListener listener = new ExampleListener();
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}
我有问题的类(构建SIP Stack对象的类):
package net.bezeqint.sip.enp;
import javax.sip.*;
import javax.sip.message.*;
import javax.sip.header.*;
import javax.sip.address.*;
import javax.sip.address.URI;
import java.net.*;
import java.util.*;
public class ExampleListener implements SipListener {
private SipFactory mySipFactory;
private SipStack mySipStack;
private ListeningPoint myListeningPoint;
private SipProvider mySipProvider;
private MessageFactory myMessageFacory;
private HeaderFactory myHeaderFactory;
private AddressFactory myAddressFactory;
private Properties myProperties;
private String myIP;
private int myPort = 5060;
public ExampleListener() throws Exception {
mySipFactory = SipFactory.getInstance();
mySipFactory.setPathName("gov.nist");
// create factories
myMessageFacory = mySipFactory.createMessageFactory();
myHeaderFactory = mySipFactory.createHeaderFactory();
myAddressFactory = mySipFactory.createAddressFactory();
// create a Properties object to pass as an argument to the createSipStack() method
myProperties = new Properties();
myProperties.setProperty("javax.sip.STACK_NAME","myStack");
// test
// myProperties.setProperty("javax.sip.IP_ADDRESS","192.168.1.1");
System.out.println("Creating SipStack...");
mySipStack = mySipFactory.createSipStack(myProperties);
System.out.println("SipStack created!");
// get our IP address to be used when creating the ListeningPoint
myIP = InetAddress.getLocalHost().getHostAddress();
myListeningPoint = mySipStack.createListeningPoint(myIP, myPort, "udp");
mySipProvider = mySipStack.createSipProvider(myListeningPoint);
mySipProvider.addSipListener(this);
// begin building a request
Address destAddress = myAddressFactory.createAddress("sip:registrar.ocean.com");
Address addressOfRecord = myAddressFactory.createAddress("sip:peter@ocean.com");
Address contactAddress = myAddressFactory.createAddress("sip:peter@169.254.153.60");
// convert address to URI object
URI myRequestURI = destAddress.getURI();
// create headers
ArrayList viaHeaders = new ArrayList();
ViaHeader myViaHeader = myHeaderFactory.createViaHeader("Peterpc.ocean.com"
, 5060, "udp", "z9hG4bKnashds7");
viaHeaders.add(myViaHeader);
MaxForwardsHeader myMaxForwardsHeader =
myHeaderFactory.createMaxForwardsHeader(70);
ToHeader myToHeader = myHeaderFactory.createToHeader(addressOfRecord, null);
FromHeader myFromHeader = myHeaderFactory.createFromHeader(addressOfRecord, "456248");
CallIdHeader myCallIDHeader = myHeaderFactory.createCallIdHeader("843817637684230@998sdasdh09");
CSeqHeader myCseqHeader = myHeaderFactory.createCSeqHeader(1826, "REGISTER");
// create message
Request myRequest = myMessageFacory.createRequest(myRequestURI, "REGISTER", myCallIDHeader, myCseqHeader, myFromHeader, myToHeader, viaHeaders, myMaxForwardsHeader);
// add missing headers
ContactHeader myContactHeader = myHeaderFactory.createContactHeader(contactAddress);
myRequest.addHeader(myContactHeader);
// print the message
System.out.println(myRequest);
}
@Override
public void processDialogTerminated(DialogTerminatedEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void processIOException(IOExceptionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void processRequest(RequestEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void processResponse(ResponseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void processTimeout(TimeoutEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void processTransactionTerminated(TransactionTerminatedEvent arg0) {
// TODO Auto-generated method stub
}
}
控制台输出:
创建ExampleListener ... 创建SipStack ...... javax.sip.PeerUnavailableException:对等SIP堆栈:gov.nist.javax.sip.SipStackImpl无法实例化。确保已设置路径名称。 在javax.sip.SipFactory.createStack(SipFactory.java:324) 在javax.sip.SipFactory.createSipStack(SipFactory.java:152) 在net.bezeqint.sip.enp.ExampleListener。(ExampleListener.java:41) 在net.bezeqint.sip.enp.ListenerMain.main(ListenerMain.java:9) 引起:java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) 在javax.sip.SipFactory.createStack(SipFactory.java:314) ......还有3个 引起:java.lang.NoClassDefFoundError:org / apache / log4j / Priority 在gov.nist.javax.sip.SipStackImpl。(SipStackImpl.java:387) ......还有8个 引起:java.lang.ClassNotFoundException:org.apache.log4j.Priority 在java.net.URLClassLoader $ 1.run(未知来源) 在java.net.URLClassLoader $ 1.run(未知来源) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher $ AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 9更多
我仔细检查了mySipFactory.createSipStack()
使用的路径名,并确保将其正确导入到我的构建路径中。
javax.sip.PeerUnavailableException有什么问题?
答案 0 :(得分:7)
解决!我必须导入org.apache.log4j
包,这就行了。
答案 1 :(得分:2)
当您使用Maven构建项目时,请确保您依赖于jain-sip-api和jain-sip-ri。